C彩票计划

时间:2014-01-31 04:37:21

标签: c logical-operators

这是我的任务。

  1. 如果随机3位数字按照确切的顺序匹配用户3位数 然后是一些奖项。
  2. 如果用户匹配3位数字但不按顺序匹配,那么其他一些 奖。
  3. 如果用户匹配2位数,则为其他奖品
  4. 如果用户输入只匹配1位数,那么其他一些奖品
  5. 这就是我提出的:

    #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 个答案:

答案 0 :(得分:0)

出于某种原因,您已声明num[0]使num数组的长度为零。

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

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

char num[4];

您可以阅读:

 scanf("%3s", num)

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

答案 1 :(得分:0)

你的逻辑错了。

通过比较他们输入的内容与您生成的内容(中奖号码),可以找到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;
}