在C中检查骰子和骰子的组合

在C中检查骰子和骰子的组合,c,C,我尝试用C编写一个小骰子游戏。我是C的初学者,还需要学习很多东西。用户插入5个骰子的数字。程序将每个数字放入一个数组,然后打印出4种情况中的一种: Grand=所有5个骰子上的数字相同 扑克=4个骰子上的相同数字 满屋子=3个相等的数字和2个相等的数字 失去=没有大的、扑克的或满座的房子 我只需要编写一个if语句块,检查所有可能的组合,然后将正确的大小写打印到控制台中。但那要花我很长时间。所以我想问,是否有更简单的方法来实现这一点 我对Grand和Lost进行了编码,到目前为止: #includ

我尝试用C编写一个小骰子游戏。我是C的初学者,还需要学习很多东西。用户插入5个骰子的数字。程序将每个数字放入一个数组,然后打印出4种情况中的一种:

  • Grand=所有5个骰子上的数字相同
  • 扑克=4个骰子上的相同数字
  • 满屋子=3个相等的数字和2个相等的数字
  • 失去=没有大的、扑克的或满座的房子
  • 我只需要编写一个if语句块,检查所有可能的组合,然后将正确的大小写打印到控制台中。但那要花我很长时间。所以我想问,是否有更简单的方法来实现这一点

    我对Grand和Lost进行了编码,到目前为止:

    #include <stdio.h>
    
    int main() {
    
        int dices[5];
    
        printf("Program Dice game \n\n");
    
        for(int i=0; i < 5; i++) {
            printf("dice %i: ", i+1);
            scanf("%i", &dices[i]);
        }
    
        printf("dice \t");
        printf("1 \t");
        printf("2 \t");
        printf("3 \t");
        printf("4 \t");
        printf("5 \n");
        printf("number \t");
    
        for(int i=0; i < 5; i++) {
            printf("%i \t", dices[i]);
        }
        printf("\n\n");
    
        if(dices[0] == dices[1] && dices[0] == dices[2] 
            && dices[0] == dices[3] && dices[0] == dices[4]) {
            printf("Win! Grand!");
        } else {
            printf("Lose!");
        }
    
        return 0;
    }
    
    #包括
    int main(){
    整数骰子[5];
    printf(“程序骰子游戏\n\n”);
    对于(int i=0;i<5;i++){
    printf(“骰子%i:,i+1);
    scanf(“%i”和骰子[i]);
    }
    printf(“dice\t”);
    printf(“1\t”);
    printf(“2\t”);
    printf(“3\t”);
    printf(“4\t”);
    printf(“5\n”);
    printf(“数字\t”);
    对于(int i=0;i<5;i++){
    printf(“%i\t”,骰子[i]);
    }
    printf(“\n\n”);
    如果(骰子[0]==骰子[1]&&骰子[0]==骰子[2]
    &&骰子[0]==骰子[3]&骰子[0]==骰子[4]){
    printf(“赢!大!”);
    }否则{
    printf(“丢失!”);
    }
    返回0;
    }
    
    一种解决方案是对骰子数组进行排序。这样,你就可以少做很多比较了。下面是一个例子:

    int cmp_func (const void *a, const void *b)
    {
       return (*(int*)a - *(int*)b);
    }
    
    int main() {
    
        int dice[5] = {2, 3, 2, 3, 3}; //arbitrary dice combination
    
        qsort(dice, 5, sizeof(int), cmp_func);
    
        if (dice[0] == dice[4])
        {
            printf("Grand\n");
        }
        else if (dice[1] == dice[4] || dice[0] == dice[3])
        {
            printf("Poker\n");
        }
        else if ((dice[0] == dice[2] && dice[3] == dice[4]) || (dice[0] == dice[1] && dice[2] == dice[4]))
        {
            printf("Full House\n");
        }
        else
        {
            printf("Lose\n");
        }
        return (0);
    }
    
    一旦你的骰子被排序,如果第一个和最后一个相等,你可以假设它们都相等。如果第一个等于第四个或第二个等于最后一个,你可以假设你有4个相同的骰子,等等

    请注意,如果骰子数组的初始顺序很重要,则必须复制它并使用另一个数组进行排序/测试。

    骰子的复数形式是骰子。