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;
}
程序是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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询