c语言随机函数生成20位整数,随机删除其中的11个数,使得剩余的数据组成最大数和最小数,求它们的差值
2个回答
展开全部
程序是C++的,但是只要改下头文件,本身是C语言的。
思路都在程序中,VS2010编译通过,功能实现。
望采纳~
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
int data[20];
int max[9];
int min[9];
// 生成20位随机数
srand((unsigned int)(time(NULL)));
for(int i = 0; i<=19; i++)
{
int _data;
do
{
_data = rand() % 10;
}
while(_data == 0 && i==19);
// ↑防止最高位生成0
data[i] = _data;
}
printf("Data:");
for(int i = 19; i>= 0; i--)
{
printf("%d",data[i]);
}
printf("\n");
// 取得最大数
int flag = 20;
int _max = 0;
for(int i = 8; i >= 0; i--)
{
for(int j = flag-1; j >= i; j-- )
{
if(data[j] > _max)
{
_max = data[j];
flag = j;
}
}
max[i] = _max;
_max = 0;
}
/*
思路:最高位对一个数的大小影响最大,所以在选择范围内选取最大的最高位,
选取范围,最高位,也就是第9位,可以在原始数的第20-9位选择,因为必须
留下8个数,防止后面没得选了,所以递推第N位选择范围是从N-1选取的位置
前一位到第N位,例如第3个数选在了第9位,那么第四个数只能选在第8位到
第4位。
*/
printf("Max:");
for(int i = 8; i>= 0; i--)
{
printf("%d",max[i]);
}
printf("\n");
// 取得最小数
flag = 20;
int _min = 9;
for(int i = 8; i >= 0; i--)
{
for(int j = flag-1; j >= i; j-- )
{
if((data[j] < _min && i != 8)||(data[j] < _min && data[j] != 0))
{
_min = data[j];
flag = j;
}
}
min[i] = _min;
_min = 9;
}
/*
思路:同取得最大数,只不过要防止最高位取到0
*/
printf("Min:");
for(int i = 8; i>= 0; i--)
{
printf("%d",min[i]);
}
printf("\n");
// 求差值,因为数据9位数,使用long
long lmax = 0,lmin = 0,diff = 0;
for(int i = 0; i<=8; i++)
{
lmax += max[i] * pow((double)10, i);
lmin += min[i] * pow((double)10, i);
}
diff = lmax - lmin;
printf("Difference:%ld", diff);
printf("\n");
int _re;
scanf("%d",&_re);
return 0;
}
思路都在程序中,VS2010编译通过,功能实现。
望采纳~
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
int data[20];
int max[9];
int min[9];
// 生成20位随机数
srand((unsigned int)(time(NULL)));
for(int i = 0; i<=19; i++)
{
int _data;
do
{
_data = rand() % 10;
}
while(_data == 0 && i==19);
// ↑防止最高位生成0
data[i] = _data;
}
printf("Data:");
for(int i = 19; i>= 0; i--)
{
printf("%d",data[i]);
}
printf("\n");
// 取得最大数
int flag = 20;
int _max = 0;
for(int i = 8; i >= 0; i--)
{
for(int j = flag-1; j >= i; j-- )
{
if(data[j] > _max)
{
_max = data[j];
flag = j;
}
}
max[i] = _max;
_max = 0;
}
/*
思路:最高位对一个数的大小影响最大,所以在选择范围内选取最大的最高位,
选取范围,最高位,也就是第9位,可以在原始数的第20-9位选择,因为必须
留下8个数,防止后面没得选了,所以递推第N位选择范围是从N-1选取的位置
前一位到第N位,例如第3个数选在了第9位,那么第四个数只能选在第8位到
第4位。
*/
printf("Max:");
for(int i = 8; i>= 0; i--)
{
printf("%d",max[i]);
}
printf("\n");
// 取得最小数
flag = 20;
int _min = 9;
for(int i = 8; i >= 0; i--)
{
for(int j = flag-1; j >= i; j-- )
{
if((data[j] < _min && i != 8)||(data[j] < _min && data[j] != 0))
{
_min = data[j];
flag = j;
}
}
min[i] = _min;
_min = 9;
}
/*
思路:同取得最大数,只不过要防止最高位取到0
*/
printf("Min:");
for(int i = 8; i>= 0; i--)
{
printf("%d",min[i]);
}
printf("\n");
// 求差值,因为数据9位数,使用long
long lmax = 0,lmin = 0,diff = 0;
for(int i = 0; i<=8; i++)
{
lmax += max[i] * pow((double)10, i);
lmin += min[i] * pow((double)10, i);
}
diff = lmax - lmin;
printf("Difference:%ld", diff);
printf("\n");
int _re;
scanf("%d",&_re);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看看这样行不行
#include <stdio.h>
#include <time.h>
int main()
{
int i, a[20], temp, pos, max, min;
srand(time(0));
for (i = 0; i < 20; i++)
{
a[i] = rand();
}
for (i = 19; i > 8; i--)
{
pos = rand() % 20;
temp = a[i];
a[i] = a[pos];
a[pos] = temp;
}
for (i = 0; i < 9; i++)
{
if (i == 0)
{
max = a[i];
min = a[i];
}
if (max < a[i])
{
max = a[i];
}
if (min > a[i])
{
min = a[i];
}
}
printf("max = %d, min = %d, max - min = %d\n", max, min, max - min);
return 0;
}
#include <stdio.h>
#include <time.h>
int main()
{
int i, a[20], temp, pos, max, min;
srand(time(0));
for (i = 0; i < 20; i++)
{
a[i] = rand();
}
for (i = 19; i > 8; i--)
{
pos = rand() % 20;
temp = a[i];
a[i] = a[pos];
a[pos] = temp;
}
for (i = 0; i < 9; i++)
{
if (i == 0)
{
max = a[i];
min = a[i];
}
if (max < a[i])
{
max = a[i];
}
if (min > a[i])
{
min = a[i];
}
}
printf("max = %d, min = %d, max - min = %d\n", max, min, max - min);
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询