c语言随机函数生成20位整数,随机删除其中的11个数,使得剩余的数据组成最大数和最小数,求它们的差值

如题所述

楼主你好~~~

程序是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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-08
使得剩余的数据组成最大数和最小数???