本文实例为大家分享了C语言实现抢红包的具体代码,供大家参考,具体内容如下
1、算法背景:
大家知道,微信拼手气红包和普通红包两种。普通红包每个人抢到的金额是固定的(总额的平均数),拼手气红包是随机金额(每个人抢到的是随机的,差别可能非常大,有的人抢到的是1分,有的抢到的可能是几元、十几元、几十元),目前的抢红包算法只能输入两个参数,即总金额、总人数。
2、算法要求:
现要求同学们设计一个改进的抢红包算法,可以设定总金额(total)、总人数(num)、抢到的最低金额(min)和最高金额(max),这样就可以控制每个抢红包的,抢到的不会太少,也不会太多。
(1)先用自然语言给出算法设计的思想:
第一步:输入红包金额总金额,红包个数,红包金额最低/最高额度。
第二步:判断带输入数据是否满足算法要求,不满足输出提示信息,并重新输入数据。
第三步:生成一个随时红包金额
第四步:判断红包金额是否满足条件,如果满足,继续生成下一个红包金额,如果不满足在
此生成新的随机红包金额,知道满足条件。
第五步:输出抢红包的过程信息
(2)进行异常检查与处理;
(3)给出C语言源代码实现,运行结果展示;
源代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void input();
int range_random_price( int start_price, int end_price);
void redPackets( double Total, int num, double Min_price, double Max_price);
int maxx = 0, maxx_index = -1;
int main()
{
input();
return 0;
}
// 数据输入
void input()
{
double total;
int num;
double min_price, max_price;
printf ( "请输入以下数据:\n" );
printf ( "红包总金额: " );
scanf ( "%lf" , &total);
putchar ( '\n' );
printf ( "红包数量: " );
scanf ( "%d" , &num);
putchar ( '\n' );
printf ( "红包最低金额: " );
scanf ( "%lf" , &min_price);
putchar ( '\n' );
printf ( "红包最高金额: " );
scanf ( "%lf" , &max_price);
putchar ( '\n' );
redPackets(total, num, min_price, max_price);
}
// 生成(a, b) 之间的随机数
int range_random_price( int start_price, int end_price)
{
return rand ()%(end_price-start_price+1) +start_price;
}
// total :总金额(元) num:人的个数 min_price max_price :最低/最高金额
void redPackets( double Total, int num, double Min_price, double Max_price)
{
// 刚开始金额全部扩大100倍转变成整数,最后输出的再除以一百,转变为浮点数
int total = ( int )Total*100;
int min_price = ( int )Min_price*100;
int max_price = ( int )Max_price*100;
if ((total*1.0 / num) - min_price*1.0 < 1e-9)
{
printf ( "您输入的总金额过小,或者抢的红包金额最低限度过大,请重新输入\n" );
input();
return ;
}
printf ( "抢红包结果如下:\n" );
for ( int i = 1; i < num; i++)
{
int random_price;
while (1)
{
random_price = range_random_price(min_price, max_price);
//判断剩下的金额是否满足条件
if ((total - random_price)*1.0 / (num - i) - min_price*1.0 >= 1e-9)
break ;
}
if (maxx < random_price)
maxx = random_price, maxx_index = i;
total -= random_price; // 剩余金额
printf ( "第 %d 个人抢到的红包金额为 %.2f, 红包剩余金额为 %.2f\n" , i, ( double )(random_price/100.0), ( double )(total/100.0));
}
if (maxx < total)
maxx = total, maxx_index = num;
// 输出最后一个人的红包金额
printf ( "第 %d 个人抢到的红包金额为 %.2f, 红包剩余金额为 0.00\n" , num, ( double )(total/100.0));
printf ( "运气王是 %d 号\n" , maxx_index);
}
|
程序运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_38177302/article/details/78967784