问题描述:
编程实现一个简单的微信红包分配算法,满足要求即可:(1)键盘输入红包的总金额X元,以及红包个数N,例如10.88,表示10.88元。N是正整数。(2)每个红包的金额至少为1分钱,如果总金额无法满足这一条件,则提示重新输入。(3)在红包金额固定的条件下,单个红包的金额随机生成,且最小金额可以是1分钱。(4)屏幕上输出红包分配结果。
sample input:
100 5//红包金额100,个数为5
sample output:
10.1 20 30.2 9.9 29.8
测试结果:
知识点:
%g:自动选择%f和%e两种格式中较短的格式输出,并且不输出数字后面没有意义的零
AC代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
最小金额为1分,而time()生成的数为整数,
故先把所有金额换算成'分',每次分配金额都要为之后分配金额留下(N-1)分,其中N为剩下
没有分的红包个数,X表示还剩下的金额数(分),那么当前红包金额范围是[1,X-(N-1)]
*/
int main()
{
srand((unsigned)time(NULL));//种子
double x;
int n,temp;
scanf("%lf %d",&x,&n);
while(x<n*0.01)
{
printf("输入金额过小,请重新输入:\n");
scanf("%lf %d",&x,&n);
}
int X=(int)(x*100);//换算成‘分’,此处要(x*100)不然会先执行类型转换
while(n>0)
{
if(n==1)
{
printf("%g",(double)X/100);
return 1;
}
temp=rand()%(X-n+1)+1;
printf("%g ",((double)(temp))/100);
X-=temp;//减去temp
n--;
}
}