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

 我来答
百度网友01136f8
2012-11-09 · TA获得超过906个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:185万
展开全部
楼主你好~~~

程序是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;
}
534009160
2012-11-08 · 超过11用户采纳过TA的回答
知道答主
回答量:92
采纳率:0%
帮助的人:33.8万
展开全部
使得剩余的数据组成最大数和最小数???
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式