程序设计题目:
微信红包程序:给定一个钱数m,发红包人数n,其中10<=m, n<=200将钱数拆成几个指定的吉利数(如1.66,1.68, 16.8,1.78,17.8,1.88,18.8,1.99,5.20,0.66,6.6,6.66,0.08,0.88,8.8,8.88,0.99,9.9,9.99)并发出,要求要发出n个红包,分布比较均匀。
解题思路:
1.我们可以先设置一组吉利数字的luckey数组,吉利数值都要减0.01。
2.设置红包,每个红包被分成的底线为0.01,不能为空,这也是为什么1中所说吉利数的数值要减去0.01。
3.通过随机数依次调用luckey数组给每个红包分成吉利数的钱,直到钱数等于或大于给定钱数,若等于是最好的直接输出,若是大于需要将分出去的钱与给定的钱多出的差让最后给分吉利数的红包减去,然后输出。
代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main(){
double luckey[19]={1.65,1.67,16.79,1.77,17.79,1.87,18.79,1.98,5.19,0.65,6.59,6.65,0.07,0.87,8.79,8.87,0.98,9.89,9.98};//吉利数
double red[100];//红包
float money,r_money,m_money=0; //输入金额,现在金额,验证金额
int number; //分成n个红包
int i,k;
printf("please input the number:");
scanf("%d",&number);
printf("please input money:");
scanf("%f",&money);
for(i=0;i<number;i++) //底线为0.01
{
red[i]=0.01;
}
r_money = money-(0.01*(double)number);
while(1)//循环
{
for(i=0;i<number;i++)//循环每个红包
{
k=rand()%10;
red[i] = red[i] + luckey[k] ; //进行随机添加吉利数
r_money = r_money - luckey[k] ;
if(r_money == 0) //判断结束,好
{
goto here;
}
if(r_money < 0) //判断结束,一般
{
red[i] = red[i] + r_money;
goto here;
}
}
}
here:
for(i=0;i<number;i++) //循环输出红包
{
m_money=m_money+red[i];
printf("%.2f\t",red[i]);
}
printf("\n%.2f\t",m_money); //验证
printf("\n");
}
测试样例,分20个红包,给定100元
注意:(最后一行输出值为判断所有红包钱数加起来是否为给定钱数)
源代码请到这里下载
上一篇文章———>Pycharm自定义更换背景图,来给代码加个PS~~~
下一篇文章———>Python图书管理系统程序设(SystemBooks)