1 假设有函数random(),传入参数n(n>0)会返回0到n-1中任意一个数,编写randomlist()实现,在正负整数区间[-20,20]内随机输出5个int型整数,让他们的和为0。
(先写编程思路,在写代码,不写编程思路扣分)
解析:
在c语言中,rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h。
如何产生一个X到Y的随机数,通常的做法是这样写:
k=rand()%(Y-X+1)+X;
这样,就可以产生你想要的任何范围内的随机数了。
void randomlist()
{
int n;
int sum=0,flag=1;
int random[5];///把产生的五个随机数存起来
while(flag==1)//如超出随机数总和的范围,则重新生成随机数
{
sum=0;//将总和归零
printf("符合条件的5个随机数为:");//打印一个回车
for(int i=0;i<5;i++){
printf("\n");
n=(random(40)%40)-20;//随机数在[-20,20]之间
sum=sum+n;//将生成的随机数累加,存在sum变量中
random[i]=n;
}
if(sum==0)//判断是否等于确定的随机数总和
{
flag=0;//如果不等,变量flag为0
for(int i=0;i<5;i++){
printf("%d\n",random[i]);
}
}
}
}
注:这是一个很基本的方法,时间效率不高,谁有更好的方法可以贴出来大家商讨一下!