大一C语言简单问题猜拳

怎么下手?如何猜拳?审题审不明白,是输入四个数字分别一一与系统随机数字进行判读吗?

题目49:根据游戏规则输出判断结果
【说明及要求】
游戏规则:A,B,C,D
(1)A>B: AD
(2)B>C: B>D
(3)C 【提示】猜拳
(1)产生三个随机数;
(2)对三个随机数的意义进行说明(三个数代表石头、剪刀、布);
(3)学生从键盘输入三个数;
(4)将上述两种数进行“猜拳”,根据游戏规则进行判读;
(5)输出判断结果;
(6)退出系统。

“Devil组”引证GPT后的撰写:

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

int main() {
    int computer[3]; // 存储电脑产生的三个随机数
    int player[3]; // 存储玩家输入的三个数
    int i, j;
    
    srand(time(NULL)); // 用当前时间作为随机数种子
    for (i = 0; i < 3; i++) {
        computer[i] = rand() % 3 + 1; // 产生1~3之间的随机整数
    }
    
    printf("请输入三个整数(1表示石头,2表示剪刀,3表示布):\n");
    for (i = 0; i < 3; i++) {
        scanf("%d", &player[i]);
    }
    
    // 判断结果
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (i == j) {
                continue; // 避免自己和自己比较
            }
            if ((player[i] == 1 && player[j] == 2) || 
                (player[i] == 2 && player[j] == 3) ||
                (player[i] == 3 && player[j] == 1)) {
                // 玩家i赢了
                if ((computer[i] > computer[j] && computer[i] < computer[(i+j)%3]) || 
                    (computer[i] < computer[j] && computer[i] > computer[(i+j)%3])) {
                    // 符合A>B或A<C或A>D
                    printf("玩家%d赢了\n", i+1);
                } else {
                    printf("玩家%d输了\n", i+1);
                }
            } else if ((player[j] == 1 && player[i] == 2) || 
                       (player[j] == 2 && player[i] == 3) ||
                       (player[j] == 3 && player[i] == 1)) {
                // 玩家j赢了
                if ((computer[j] > computer[i] && computer[j] < computer[(i+j)%3]) || 
                    (computer[j] < computer[i] && computer[j] > computer[(i+j)%3])) {
                    // 符合A>B或A<C或A>D
                    printf("玩家%d赢了\n", j+1);
                } else {
                    printf("玩家%d输了\n", j+1);
                }
            }
        }
    }
    
    return 0;
}

具体的思路如下:

  • 首先产生三个随机数,表示电脑出的石头、剪刀、布,用数组 computer 存储。
  • 接着提示玩家输入三个整数,分别表示石头、剪刀、布,用数组 player 存储。
  • 然后用双重循环对玩家输入的三个数进行两两比较,判断输赢。具体的判断逻辑如下:
  • 如果玩家 i 出的是石头,玩家 j 出的是剪刀,或者玩家 i 出的是剪刀,玩家 j 出的是布,或者玩家 i 出的是布,玩家 j 出的是石头,那么玩家 i 赢了。
  • 如果玩家 j 出的是石头,玩家 i 出的是剪刀,或者玩家 j 出的是剪刀,玩家 i 出的是布,或者玩家 j 出的是布,玩家 i 出的是石头,那么玩家 j 赢了。
  • 最后,根据题目给定的游戏规则,判断哪个玩家赢了,输出判断结果。

基于chatGPT的回答和自己的思路,以下是用C语言编写的简单猜拳游戏代码,实现了游戏规则的判断和输出结果:

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

int main()
{
    int computer[3]; // 电脑随机出的三个数
    int user[3]; // 用户输入的三个数
    int i, j;
    
    // 初始化随机数种子
    srand((unsigned int)time(NULL));

    // 随机生成电脑的三个数
    for (i = 0; i < 3; i++) {
        computer[i] = rand() % 3 + 1;
    }
    
    // 输入用户的三个数
    printf("请输入三个整数,代表石头、剪刀、布(用空格分隔):");
    for (i = 0; i < 3; i++) {
        scanf("%d", &user[i]);
    }

    // 输出电脑和用户的选择
    printf("电脑出拳:");
    for (i = 0; i < 3; i++) {
        if (computer[i] == 1) {
            printf("石头 ");
        }
        else if (computer[i] == 2) {
            printf("剪刀 ");
        }
        else {
            printf("布 ");
        }
    }
    printf("\n");
    printf("你出拳:");
    for (i = 0; i < 3; i++) {
        if (user[i] == 1) {
            printf("石头 ");
        }
        else if (user[i] == 2) {
            printf("剪刀 ");
        }
        else {
            printf("布 ");
        }
    }
    printf("\n");

    // 判断结果
    int win = 0, lose = 0;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (i != j) { // 避免比较相同的数
                if ((user[i] == 1 && user[j] == 2 && computer[i] == 1) || // 石头剪刀
                    (user[i] == 2 && user[j] == 3 && computer[i] == 2) || // 剪刀布
                    (user[i] == 3 && user[j] == 1 && computer[i] == 3)) { // 布石头
                    win++;
                }
                else if ((user[i] == 1 && user[j] == 3 && computer[j] == 1) || // 石头布
                         (user[i] == 2 && user[j] == 1 && computer[j] == 2) || // 剪刀石头
                         (user[i] == 3 && user[j] == 2 && computer[j] == 3)) { // 布剪刀
                    lose++;
                }
            }
        }
    }
    
    // 输出结果
    if (win > lose) {
        printf("你赢了!\n");
    }
    else if (win < lose) {
        printf("你输了!\n");
    }
    else {
        printf("平局!\n");
    }
    
  

该回答引用ChatGPT
如有疑问可以回复我
以下是实现该题目的C语言代码:

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

int main() {
    int a, b, c, d;
    srand(time(NULL)); // 初始化随机数生成器

    // 产生三个随机数
    a = rand() % 3 + 1; // 1表示石头,2表示剪刀,3表示布
    b = rand() % 3 + 1;
    c = rand() % 3 + 1;

    printf("系统生成的随机数为:%d %d %d\n", a, b, c);
    printf("请从键盘输入三个数(1表示石头,2表示剪刀,3表示布):\n");
    scanf("%d %d %d", &a, &b, &c);

    // 根据游戏规则进行判断
    if (a > b && a < c && a > d) {
        printf("恭喜你,你赢了!\n");
    } else if (b > c && b > d) {
        printf("恭喜你,你赢了!\n");
    } else if (c < d) {
        printf("恭喜你,你赢了!\n");
    } else {
        printf("很遗憾,你输了。\n");
    }

    return 0;
}


该回答引用GPTᴼᴾᴱᴺᴬᴵ
这道题目需要实现一个简单的猜拳游戏,主要的思路如下:

  1. 生成三个随机数,分别代表系统出拳的石头、剪刀、布;
  2. 接收用户输入的三个数字,分别代表用户出拳的石头、剪刀、布;
  3. 根据游戏规则判断胜负,输出判断结果;
  4. 循环进行步骤2-3,直到用户选择退出游戏。

下面是一个简单的C语言实现:

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

int main() {
    int sys_rock, sys_scissors, sys_paper;
    int user_rock, user_scissors, user_paper;
    int user_input;
    srand(time(NULL));
    sys_rock = rand() % 3 + 1;     // 生成1-3的随机数
    sys_scissors = rand() % 3 + 1;
    sys_paper = rand() % 3 + 1;
    printf("请出拳:石头(1)、剪刀(2)、布(3)\n");
    while (1) {
        printf("请输入你的选择(输入0退出):");
        scanf("%d", &user_input);
        if (user_input == 0) break;
        if (user_input < 1 || user_input > 3) {
            printf("无效的输入,请重新输入!\n");
            continue;
        }
        user_rock = user_input == 1;
        user_scissors = user_input == 2;
        user_paper = user_input == 3;
        printf("系统出拳:石头(%d)、剪刀(%d)、布(%d)\n", sys_rock, sys_scissors, sys_paper);
        if ((user_rock && sys_paper) || (user_scissors && sys_rock) || (user_paper && sys_scissors)) {
            printf("你输了!\n");
        } else if ((user_rock && sys_scissors) || (user_scissors && sys_paper) || (user_paper && sys_rock)) {
            printf("你赢了!\n");
        } else {
            printf("平局!\n");
        }
    }
    printf("游戏结束,谢谢参与!\n");
    return 0;
}


上述代码中,我们使用了rand()函数来生成1-3之间的随机数,每个随机数代表系统出拳的石头、剪刀、布。然后我们使用while循环来接收用户的输入,并且根据游戏规则判断胜负,最后输出结果。如果用户输入0,就跳出循环并结束游戏。


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

int main() {
    int computer[3]; // 存储电脑产生的三个随机数
    int player[3]; // 存储玩家输入的三个数
    int i, j;
    
    srand(time(NULL)); // 用当前时间作为随机数种子
    for (i = 0; i < 3; i++) {
        computer[i] = rand() % 3 + 1; // 产生1~3之间的随机整数
    }
    
    printf("请输入三个数(1表示石头,2表示剪刀,3表示布):\n");
    for (i = 0; i < 3; i++) {
        scanf("%d", &player[i]);
    }
    
    // 判断结果
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (i == j) {
                continue; // 避免自己和自己比较
            }
            if ((player[i] == 1 && player[j] == 2) || 
                (player[i] == 2 && player[j] == 3) ||
                (player[i] == 3 && player[j] == 1)) {
                // 玩家i赢了
                if ((computer[i] > computer[j] && computer[i] < computer[(i+j)%3]) || 
                    (computer[i] < computer[j] && computer[i] > computer[(i+j)%3])) {
                    // 符合A>B或A<C或A>D
                    printf("玩家%d赢了\n", i+1);
                } else {
                    printf("玩家%d输了\n", i+1);
                }
            } else if ((player[j] == 1 && player[i] == 2) || 
                       (player[j] == 2 && player[i] == 3) ||
                       (player[j] == 3 && player[i] == 1)) {
                // 玩家j赢了
                if ((computer[j] > computer[i] && computer[j] < computer[(i+j)%3]) || 
                    (computer[j] < computer[i] && computer[j] > computer[(i+j)%3])) {
                    // 符合A>B或A<C或A>D
                    printf("玩家%d赢了\n", j+1);
                } else {
                    printf("玩家%d输了\n", j+1);
                }
            }
        }
    }
    
    return 0;
}


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

int main() {
    int computer[3]; // 存储电脑产生的三个随机数
    int player[3]; // 存储玩家输入的三个数
    int i, j;
    
    srand(time(NULL)); // 用当前时间作为随机数种子
    for (i = 0; i < 3; i++) {
        computer[i] = rand() % 3 + 1; // 产生1~3之间的随机整数
    }
    
    printf("请输入三个数(1表示石头,2表示剪刀,3表示布):\n");
    for (i = 0; i < 3; i++) {
        scanf("%d", &player[i]);
    }
    
    // 判断结果
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (i == j) {
                continue; // 避免自己和自己比较
            }
            if ((player[i] == 1 && player[j] == 2) || 
                (player[i] == 2 && player[j] == 3) ||
                (player[i] == 3 && player[j] == 1)) {
                // 玩家i赢了
                if ((computer[i] > computer[j] && computer[i] < computer[(i+j)%3]) || 
                    (computer[i] < computer[j] && computer[i] > computer[(i+j)%3])) {
                    // 符合A>B或A<C或A>D
                    printf("玩家%d赢了\n", i+1);
                } else {
                    printf("玩家%d输了\n", i+1);
                }
            } else if ((player[j] == 1 && player[i] == 2) || 
                       (player[j] == 2 && player[i] == 3) ||
                       (player[j] == 3 && player[i] == 1)) {
                // 玩家j赢了
                if ((computer[j] > computer[i] && computer[j] < computer[(i+j)%3]) || 
                    (computer[j] < computer[i] && computer[j] > computer[(i+j)%3])) {
                    // 符合A>B或A<C或A>D
                    printf("玩家%d赢了\n", j+1);
                } else {
                    printf("玩家%d输了\n", j+1);
                }
            }
        }
    }
    
    return 0;
}

参考GPT和自己的思路,以下是C语言的代码实现,实现了猜拳游戏的规则判断和输入输出:

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

int main() {
    int a, b, c;  // 三个随机数,代表石头、剪刀、布
    int x, y, z;  // 学生输入的三个数
    srand((unsigned) time(NULL));  // 随机数种子初始化
    while (1) {  // 循环进行游戏
        // 产生三个随机数
        a = rand() % 3 + 1;  // 生成1~3之间的随机整数
        b = rand() % 3 + 1;
        c = rand() % 3 + 1;
        printf("系统已生成三个数字,请输入您的猜测(1-石头,2-剪刀,3-布):\n");
        // 学生输入三个数
        scanf("%d%d%d", &x, &y, &z);
        // 判断学生输入是否合法
        if (x < 1 || x > 3 || y < 1 || y > 3 || z < 1 || z > 3) {
            printf("输入错误,请重新输入!\n");
            continue;
        }
        // 输出系统随机数和学生输入的数
        printf("系统猜测:%d-%d-%d,您猜测:%d-%d-%d,", a, b, c, x, y, z);
        // 判断游戏规则
        if ((a > b && a < c && a > z) || (a < b && a > c && a < z)) {
            printf("您赢了!\n");
        } else if ((b > c && b > a && b > z) || (b < c && b < a && b < z)) {
            printf("您赢了!\n");
        } else if ((c < d && c > b && c < x) || (c > d && c < b && c > x)) {
            printf("您赢了!\n");
        } else if (a == x && b == y && c == z) {
            printf("平局!\n");
        } else {
            printf("系统赢了!\n");
        }
        // 询问是否继续游戏
        char choice;
        printf("是否继续游戏?(Y/N)");
        scanf(" %c", &choice);  // 注意空格
        if (choice == 'N' || choice == 'n') {
            break;  // 退出游戏
        }
    }
    printf("游戏结束,欢迎再次挑战!\n");
    return 0;
}

这段代码利用了随机数生成函数rand()和时间函数time()来产生三个随机数,通过scanf()函数来读取学生输入的三个数,并进行游戏规则的判断,最后输出游戏结果并询问是否继续游戏。

在本题中,需要先产生三个随机数,分别代表石头、剪刀、布。然后,学生需要从键盘输入三个数字,代表自己猜拳的选择。

接着,根据游戏规则,将学生的选择与系统的随机选择进行比较,从而得出胜负关系。

最后,根据结果输出判断结果,并退出系统。

下面是一种可能的实现方式:

import random

# 产生系统的随机选择
system_choices = ["石头", "剪刀", "布"]
system_choices_nums = [1, 2, 3] # 对应石头、剪刀、布的数字表示
sys_choice = random.choice(system_choices)

# 获取学生的猜拳选择
stu_choices = input("请输入你的猜拳选择(石头=1,剪刀=2,布=3):")
stu_choices = list(map(int,stu_choices.split()))

# 比较学生和系统的选择
stu_choice_1, stu_choice_2, stu_choice_3 = stu_choices
sys_choice_num = system_choices_nums[system_choices.index(sys_choice)]

# 判断胜负
if (stu_choice_1 == sys_choice_num and stu_choice_2 == sys_choice_num and stu_choice_3 == sys_choice_num):
    print("平局!")
else:
    if ((stu_choice_1 > sys_choice_num and stu_choice_2 < sys_choice_num and stu_choice_3 < sys_choice_num) or \
        (stu_choice_1 < sys_choice_num and stu_choice_2 > sys_choice_num and stu_choice_3 > sys_choice_num) or \
        (stu_choice_1 > sys_choice_num and stu_choice_2 > sys_choice_num and stu_choice_3 < sys_choice_num) or \
        (stu_choice_1 < sys_choice_num and stu_choice_2 < sys_choice_num and stu_choice_3 > sys_choice_num)):
        print("你赢了!系统选择的是", sys_choice)
    else:
        print("你输了!系统选择的是", sys_choice)

# 退出系统
exit()

在这段代码中,我们先定义了系统的三个随机选择:石头、剪刀、布,并分别用1、2、3表示。如果系统的选择是“石头”,我们就用1来表示;如果系统的选择是“剪刀”,我们就用2来表示,以此类推。

接着,我们使用input函数来获取学生的猜拳选择,这里我们假设学生会从键盘上输入三个数字,每个数字代表石头、剪刀、布中的一种,以空格分隔。我们使用split()函数来将输入的字符串空格分隔并转换为数字列表。

然后,我们将学生的选择和系统的随机选择通过一系列的判断来比较,从而判断胜负。具体来说,我们使用判断式来判断学生当前的选择与系统的选择的关系,如果符合规则,则判定学生胜利;否则,学生失败。

最后,我们输出判断结果,并通过exit()函数退出系统。

需要注意的是,本代码只是一种可能的实现方式,具体的实现方式可以因人而异。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这道题目的意思是模拟一个猜拳游戏,游戏规则如下:

  1. 石头>剪刀>布>石头
  2. 产生三个随机数,代表石头、剪刀、布
  3. 玩家从键盘输入三个数,代表石头、剪刀、布
  4. 将玩家的输入与系统的随机数进行比较,根据游戏规则进行判断,输出胜负结果。
  5. 退出系统

下面是一个简单的C语言代码实现:

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

int main()
{
    // 产生随机数
    srand((unsigned int)time(NULL));
    int computer1 = rand() % 3 + 1;  // 随机数1表示石头、剪刀、布
    int computer2 = rand() % 3 + 1;  // 随机数2表示石头、剪刀、布
    int computer3 = rand() % 3 + 1;  // 随机数3表示石头、剪刀、布

    // 提示输入
    printf("请输入你的选项:\n");
    printf("1表示石头,2表示剪刀,3表示布\n");

    // 获取玩家输入
    int player1, player2, player3;
    printf("请依次输入石头、剪刀、布的选项(用空格隔开):\n");
    scanf("%d %d %d", &player1, &player2, &player3);

    // 输出结果
    printf("系统随机出的选项是:%d %d %d\n", computer1, computer2, computer3);
    if ((player1 > computer1 && player2 < computer2 && player3 < computer3) ||
        (player1 < computer1 && player2 > computer2 && player3 < computer3) ||
        (player1 < computer1 && player2 < computer2 && player3 > computer3))
    {
        printf("你赢了!\n");
    }
    else if ((player1 < computer1 && player2 > computer2 && player3 > computer3) ||
             (player1 > computer1 && player2 < computer2 && player3 > computer3) ||
             (player1 > computer1 && player2 > computer2 && player3 < computer3))
    {
        printf("你输了!\n");
    }
    else
    {
        printf("平局!\n");
    }

    return 0;
}

该代码中使用了随机数产生函数rand()和时间函数time(),以及比较运算符和逻辑运算符对玩家输入和系统随机数进行比较,并输出判断结果。
如果我的回答解决了您的问题,请采纳!


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    int computer[3]; // 存储电脑产生的三个随机数
    int player[3]; // 存储玩家输入的三个数
    int i, j;
    srand(time(NULL)); // 用当前时间作为随机数种子
    for (i = 0; i < 3; i++) {
        computer[i] = rand() % 3 + 1; // 产生1~3之间的随机整数
    }
    printf("请输入三个整数(1表示石头,2表示剪刀,3表示布):\n");
    for (i = 0; i < 3; i++) {
        scanf("%d", &player[i]);
    }
    // 判断结果
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (i == j) {
                continue; // 避免自己和自己比较
            }
            if ((player[i] == 1 && player[j] == 2) || 
                (player[i] == 2 && player[j] == 3) ||
                (player[i] == 3 && player[j] == 1)) {
                // 玩家i赢了
                if ((computer[i] > computer[j] && computer[i] < computer[(i+j)%3]) || 
                    (computer[i] < computer[j] && computer[i] > computer[(i+j)%3])) {
                    // 符合A>B或A<C或A>D
                    printf("玩家%d赢了\n", i+1);
                } else {
                    printf("玩家%d输了\n", i+1);
                }
            } else if ((player[j] == 1 && player[i] == 2) || 
                       (player[j] == 2 && player[i] == 3) ||
                       (player[j] == 3 && player[i] == 1)) {
                // 玩家j赢了
                if ((computer[j] > computer[i] && computer[j] < computer[(i+j)%3]) || 
                    (computer[j] < computer[i] && computer[j] > computer[(i+j)%3])) {
                    // 符合A>B或A<C或A>D
                    printf("玩家%d赢了\n", j+1);
                } else {
                    printf("玩家%d输了\n", j+1);
                }
            }
        }
    }
    return 0;
}



#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main()
{
    int n;
    for (;;)
    {
        int num = rand() % 3 + 1;
        printf("请您先出(1:石头 2:剪子 3:布 4:退出): ");
        scanf("%d", &n);
        if (n == 1 || n == 2 || n == 3)
        {
            if (n == 1)
                printf("您出【石头】,");
            else if (n == 2)
                printf("您出【剪子】,");
            else
                printf("您出【布】,");
            srand(time(0));
            if (num == 1)
                printf("电脑出【石头】,");
            else if (num == 2)
                printf("电脑出【剪刀】,");
            else
                printf("电脑出【布】,");
            if (n == num)
                printf("平局\n");
            else if ((n == 1 && num == 2) || (n = 2 && num == 3) || (n == 3 && num == 1))
                printf("您赢了\n");
            else
                printf("您输了\n");
        }
        else if (n == 4)
        {
            printf("退出\n");
            return 0;
        }
        else
            printf("输入错误,请重新输入!\n");
    }
    return 0;
}