C语言 微信红包

C语言 微信红包,第1张

#include <stdio.h>

#include <string.h>

#include <time.h>

#define MAX_TOTAL_MONEY 200 //红包的最大金额

#define MIN_PER_PLAYER  1   //一个人抢到的的最小面额1元

#define MAX_PLAYER_CNT (MAX_TOTAL_MONEY/MIN_PER_PLAYER) //最大抢红包的游戏人数

typedef struct player

{

    char *name//标记玩家 可以不填

    unsigned int money_get//抢到的红包

}PLAYER_T

//每个人领取到的红包金额不等 这个要求比较难搞 暂时不考虑

int main(int argc, char *argv[])

{

    unsigned int total_money = 0    //不考虑角和分 浮点运算比较复杂

    unsigned int player_cnt = 0

    int on_off = 0

    int i = 0

    int j = 0

    PLAYER_T player[MAX_PLAYER_CNT] = {0}

    PLAYER_T tmp = {0}

    

    printf("输入红包金额:\n")

    scanf("%u", &total_money)

    printf("输入游戏人数:\n")

    scanf("%u", &player_cnt)

    printf("是否需要减小贫富差距(0为关闭其余为开启):\n")

    scanf("%u", &on_off)

    

    //不符合规则的输入判断

    if (total_money > MAX_TOTAL_MONEY || 0 == total_money || 0 == player_cnt || player_cnt*MIN_PER_PLAYER > total_money)

    {

        printf("红包金额最小%u元 最大%u元 游戏人数最小1人 最大%u人\n", MIN_PER_PLAYER, MAX_TOTAL_MONEY, MAX_PLAYER_CNT)

        return 0

    }

    

    for (i = 0 i < player_cnt i++)

    {

        //设置随机种子

        srand(time(NULL)+i)

        //根据随机种子获取一个伪随机数作为抢到的红包 并通过余运算使其始终小于total_money

        player[i].money_get = rand()%total_money

        

        //限制所有人所能抢到的最大红包为当前金额池的1/5而不是全部

        if (0 != on_off)

        {

            if (total_money > 5)//5块钱以上再限制

            {

                player[i].money_get = rand()%(total_money/5)

            }

        }

        

        //最后一个人拿所有剩下的红包

        if (player_cnt - 1 == i)

        {

            player[i].money_get = total_money

        }

        //运气差随机到0元 给你最小面额

        else if (0 == player[i].money_get)

        {

            player[i].money_get = MIN_PER_PLAYER

        }

        //剩下的要保证每个人能抢到最小面额

        else if (total_money - player[i].money_get < (player_cnt-i-1)*MIN_PER_PLAYER)

        {

            player[i].money_get = total_money - (player_cnt-i-1)*MIN_PER_PLAYER

        }

        

        //把抢到的金额从红包池中减掉

        total_money -= player[i].money_get

        //如果填了name 可以把名字打印出来

        printf("第%d个玩家抢到红包:%u元\n", i+1, player[i].money_get)

    }

    

    //冒泡排序 找出手气最佳者

    for (i = 0 i < player_cnt i++)

    {

        for (j = i+1 j < player_cnt j++)

        {

            if (player[i].money_get < player[j].money_get)

            {

                memcpy(&tmp, &player[j], sizeof(PLAYER_T))

                memcpy(&player[j], &player[i], sizeof(PLAYER_T))

                memcpy(&player[i], &tmp, sizeof(PLAYER_T))

            }

        }

    }

    printf("手气最佳者抢到红包:%u元\n", player[0].money_get)//如果填了name 可以把名字打印出来

    return 0

}

完整代码如下:

#include<stdio.h>

void main()

{

        int money

int money1,money2,money5,money10,money20,money50,money100

printf("请输入金额:")

        scanf("%d",&money)

money100 = money/100

money    = money%100

money50  = money/50

money    = money%50

money20  = money/20

money    = money%20

money10  = money/10

money    = money%10

money5   = money/5

money    = money%5

money2   = money/2

money1   = money%2

printf("100元:%d张\n",money100)

printf("50元:%d张\n",money50)

printf("20元:%d张\n",money20)

printf("10元:%d张\n",money10)

printf("5元:%d张\n",money5)

printf("2元:%d张\n",money2)

printf("1元:%d张\n",money1)

}

运行结果如下图:

printf()函数是式样化输出函数, 一般用于向准则输出设备按规定式样输出消息。正在编写步骤时经常会用到此函数。printf()函数的挪用式样为: printf("<式样化字符串>",<参量表>);

其中式样化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出;另一部分是式样化规定字符, 以"%"开端, 后跟一个或几个规定字符, 用来确定输出内容式样。 参量表是需求输出的一系列参数, 其个数务必与式样化字符串所阐明的输出参数个数一样多, 各参数之间用","分开, 且顺序逐一对应, 不然将会出现意想不到的过失。

注意:函数printf从右到左压栈,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所以我们看见的结果是,从右边开始处理的。

printf 的格式有四种:

其中\n表示换行的意思。它是一个转义字符,前面在讲字符常量的时候见过。其中 n 是“new line”的缩写,即“新的一行”。此外需要注意的是,printf 中的双引号和后面的分号必须是在英文输入法下。双引号内的字符串可以是英文,也可以是中文。

这句话的意思是将变量 i 以十进制输出。那么现在有一个问题:i 本身就是十进制,为什么还要将 i 以十进制输出呢?因为程序中虽然写的是 i=10,但是在内存中并不是将 10 这个十进制数存放进去,而是将 10 的二进制代码存放进去了。计算机只能执行二进制 0、1 代码,而 0、1 代码本身并没有什么实际的含义,它可以表示任何类型的数据。所以输出的时候要强调是以哪种进制形式输出。所以就必须要有“输出控制符”,以告诉 *** 作系统应该怎样解读二进制数据。如果是%x就是以十六进制的形式输出,要是%o就是以八进制的形式输出,大家自己试一下。

输出控制符 1 对应的是输出参数 1,输出控制符 2 对应的是输出参数 2……编译、链接、执行后我们看一下输出结果:10 3注意一下,为什么 10 和 3 之间有一个空格?因为上面 %d 和 %d之间有空格,printf 中双引号内除了输出控制符和转义字符\n外,所有其余的普通字符全部都原样输出。比如:

这时我们再编译、链接、执行一下:i = 10, j = 3i=、,、空格和j=全都原样输出了。此外需要注意的是:“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。

4) printf("输出控制符 非输出控制符",输出参数)

这实际上就是上面那个例子。这时候会有一个问题:到底什么是“输出控制符”,什么是“非输出控制符”?很简单,凡是以%开头的基本上都是输出控制符。

#include <stdio.h>

int main()

{

/* 我的第一个 C 程序 */

int moneynum

int c[7]={0,0,0,0,0,0,0}

printf("输入红包金额: \n")

scanf("%d",&moneynum)

while(moneynum>0)

{

if(moneynum/100>=1)

{

moneynum-=100

c[0]++

}

else if(moneynum/50>=1)

{

moneynum-=50

c[1]++

}

else if(moneynum/20>=1)

{

moneynum-=20

c[2]++

}

else if(moneynum/10>=1)

{

moneynum-=10

c[3]++

}

else if(moneynum/5>=1)

{

moneynum-=5

c[4]++

}

else if(moneynum/2>=1)

{

moneynum-=2

c[5]++

}

else if(moneynum/1>=1)

{

moneynum-=1

c[6]++

}

}

printf("纸币数量为\n \n")

printf("100元:%d张\n",c[0])

printf(" 50元:%d张\n",c[1])

printf(" 20元:%d张\n",c[2])

printf(" 10元:%d张\n",c[3])

printf("  5元:%d张\n",c[4])

printf("  2元:%d张\n",c[5])

printf("  1元:%d张\n",c[6])

return 0

}

结果如下:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11369022.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存