当前位置: 首页 > 知识库问答 >
问题:

C彩票计划

锺离霖
2023-03-14

这是我的任务。

  1. 如果随机的3位数字与用户的3位数字完全匹配,则会获得一些奖励。
  2. 如果用户匹配3位数字但顺序不一致,则其他奖励。
  3. 如果用户匹配2位,则其他奖品
  4. 如果用户输入仅匹配1位,则其他奖品

这是我想出的:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
    int r,i,num[0];
  srand(time(NULL));
  r = rand()%(999-100+1)+100;

  printf("Here is the wininng number%d\n",r);

  printf("Enter three digit number to win lottery:\n");
  scanf("%d",num);

  for(i=0;i<3;i++){

    if(r==num[0]){
        printf("For three exact match you get $100,000\n");
    }else if((r/10)==(num[1]/10)){
        printf("For two number match you get $50,000\n");
    }else if((r%10)==(num[]%10)){
        printf("For one number match you get $10,000\n");
    }else{
        printf("You get nothing!\n");
    }}

}

我得到了三位数的匹配,有时编译后会得到三位数和两位数的匹配。告诉我怎么了。提前谢谢你们。

共有2个答案

林哲茂
2023-03-14

出于某种原因,您已经声明了num[0],这使得num成为一个长度为零的数组。

请注意,“中奖号码”实际上不是一个数字,而是一个数字字符串。

您应该将num声明为字符数组:

char num[4];

你可以阅读以下内容:

 scanf("%3s", num)

然后需要将ASCII字符转换为num[0]num[1]num[2],以便与随机数的数字进行比较。

郏兴贤
2023-03-14

你的逻辑是错误的。

通过将他们输入的内容与您生成的内容(中奖号码)进行比较,可以找到3位数的精确匹配。

3位排列更棘手,但您还需要考虑2位和1位排列。我可能会将生成的(获胜)数字转换为字符串,以及用户的数字。然后,您可以逐步完成获胜号码,计算获胜号码中与用户号码中未使用的数字匹配的位数。通过计数,您知道用户赢了什么。请注意,当一个数字匹配时,您需要将其删除,这样当获胜号码为666并且用户输入456时,您就不会计算与6匹配的三个数字。

这样地:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int win;
    int num;

    srand(time(NULL));
    win = rand() % (999 - 100 + 1) + 100;

    printf("Here is the winning number: %d\n", win);

    printf("Enter three digit number to win lottery:\n");
    if (scanf("%d", &num) != 1)
        return 1;

    if (num == win)
        printf("For exact match you get $100,000\n");
    else if (num < 0 || num > 999)
        printf("Your number is out of range - you win nothing\n");
    else
    {
        char win_str[4];
        char try_str[4];
        sprintf(win_str, "%d", win);
        sprintf(try_str, "%d", num);
        int match = 0;
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                if (win_str[i] == try_str[j])
                {
                    try_str[j] = 'x';
                    match++;
                    break;
                }
            }
        }

        switch (match)
        {
        case 0:
            printf("No digits in %.3d match %3d - you win nothing\n", num, win);
            break;
        case 1:
            printf("One digit of %.3d matches %3d - you win $10,000\n", num, win);
            break;
        case 2:
            printf("Two digits of %.3d match %3d - you win $20,000\n", num, win);
            break;
        case 3:
            printf("Three digits of %.3d match %3d - you win $50,000\n", num, win);
            break;
        default:
            printf("The impossible happened (%.3d vs %3d gives %d matches)\n", num, win, match);
            break;
        }
    }
    return 0;
}
 类似资料:
  • 本文向大家介绍使用Python计算玩彩票赢钱概率,包括了使用Python计算玩彩票赢钱概率的使用技巧和注意事项,需要的朋友参考一下 工具:Jupyter notebook + Anaconda 游戏规则:时时彩一种玩法是买尾号。2元一个数字,中奖是20元。每个数字出现的概率相等。 目前想到两种买法: 随机购买,人是感性动物,很容易受周围环境干扰。完全随机购买在生活中是不存在的。 分析数字在前面N期

  • 我必须创建一个彩票游戏,其中你随机生成六个中奖号码,模拟彩票。让用户输入六个数字,看看他们是否中了彩票! 我已经做了很多,但现在我卡住了。我对java真的很陌生,所以请原谅我。当它提示要求另一个数字时,它会这样做,但它仍然显示它以显示自制的彩票选秀权。此外,当显示计算机制作的彩票选秀权的数字时,它们是重复的相同数字,而不是6个数字。计数器不太好用,可能有点小问题,但我无法弄清楚。谢谢你

  • 我正在为课堂编写一个程序。这是一个彩票游戏。这是给出的问题: 编写一个java程序。该程序应该有一个名为lotteryNumber()的方法,该方法应该接受两个整数,最大和最小数字,并应该随机生成并返回这两个数字之间的一个数字(均包含在内)。 另外,提供一个名为checkWinner()的方法,该方法应该接受两个数组(一个用于彩票号码,一个用于用户号码),并检查它们是否相同(相同的号码和序列)。如

  • 我创建了一个彩票程序,在0-9之间随机生成3个号码,然后随机生成3个中奖号码。我需要关于如何让程序显示中奖者(如果有的话)和中奖人数的帮助。 所以类似:赢家: 人1 人员5 获奖人数:2人 这是我的程序

  • 仿网易彩票界面及所有功能。具体功能如下: 1、点击小球,并且手指在多个小球上滑动,可以连续弹出大球视图。解决网易点击小球松手瞬间滑动tableview无法移除释放大球动画效果。 2、解决淘宝彩票点击小球后弹出大图背景被顶部视图遮挡的Bug。 3、适配iPhone4和iPhone5。 [Code4App.com]

  • 我的代码看起来很业余,因为我是一名软件工程专业的二年级学生。 我创建了一个彩票号码生成器,并注意到了奇怪但一致的结果。我的程序试图匹配之前的百万欧元抽奖彩票号码。我追踪尝试次数,也追踪匹配3、4、5和6个数字的次数。 尝试次数在100万到4.22亿之间。i、 e.我会运行程序10次,我会实现一个范围,我还会跟踪每次运行所需的时间长度。 我解释了一些事情,比如防止一个随机数被多次使用,这个检查是针对