程序設計題目:
微信紅包程序:給定一個錢數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)