2303_80882796 2023-11-30 20:30 采纳率: 33.3%
浏览 5

刮刮彩票问题1234

输入第一部分给出一张合法的彩票,即用 3 行 3 列给出 0 至 9 的数字。0 表示的是这个位置上的数字初始时就能看见了,而不是彩票上的数字为 0。

第二部给出玩家刮开的三个位置,分为三行,每行按格式 x y 给出玩家刮开的位置的行号和列号(题目中定义左上角的位置为第 1 行、第 1 列。)。数据保证玩家不会重复刮开已刮开的数字。

最后一部分给出玩家选择的方向,即一个整数: 1 至 3 表示选择横向的第一行、第二行、第三行,4 至 6 表示纵向的第一列、第二列、第三列,7、8分别表示左上到右下的主对角线和右上到左下的副对角线。
输入样例
1 2 3
4 5 6
7 8 0
1 1
2 2
2 3
7
输出样例
1
5
6
180

#include <stdio.h>
int main()
{
    int f(int x,int b[4][4]);
    int a[4][4],b[4][4]={0};
    int sum=0;
    int i1,j1;
    for(int i=1;i<=3;i++)
    {
        for(int j=1;j<=3;j++)
        {
            scanf("%d",&a[i][j]);
            sum+=a[i][j];
            if(a[i][j]==0)
            {
                i1=i;
                j1=j;
            }
        }
    }
    a[i1][j1]=45-sum;
    b[i1][j1]=a[i1][j1];
    for(int i=1;i<=3;i++)
    {
        int x,y;
        scanf("%d %d",&x,&y);
        b[x][y]=a[x][y];
        printf("%d\n",a[x][y]);
    }
    int x;
    scanf("%d",&x);
    printf("%d",f(x,b));
    return 0;
}
int f(int x,int b[4][4])
{
    int sum=0;
    if(x==1||x==2||x==3)
    {
        for(int i=1;i<=3;i++)
        {
            sum+=b[x][i];
        }
    }
    else if(x==4||x==5||x==6)
    {
        for(int i=1;i<=3;i++)
        {
            sum+=b[i][x-3];   
        }
    }
    else if(x==7)
    {
        for(int i=1;i<=3;i++)
        {
            sum+=b[i][i];
        }
    }
    else if(x==8)
    {
        for(int i=1;i<=3;i++)
        {
           sum+=b[4-i][i];
        }
    }
    int t;
    switch(sum)
    {
        case 6:t=10000;break;
        case 7:case 19:t=36;break;
        case 8:t=720;break;
        case 9:t=360;break;
        case 10:t=80;break;
        case 11:t=252;break;
        case 12:t=108;break;
        case 13:case 16:t=72;break;
        case 14:t=54;break;
        case 15:case 17:t=180;break;
        case 18:t=119;break;
        case 20:t=306;break;
        case 21:t=1080;break;
        case 22:t=144;break;
        case 23:t=1800;break;
        case 24:t=3600;break;
    }
    return t;
}

这段代码有什么问题吗,有bug,求指出哪有问题,谢谢。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-30 22:16
    关注

    【以下回答由 GPT 生成】

    问题描述: 本问题是一个刮刮彩票问题,要求根据给定的彩票数字以及玩家刮开的位置和刮开方向,计算出刮开数字的总和。

    具体要求如下: 输入部分:首先给出一张合法的彩票,用 3 行 3 列的形式给出 0 至 9 的数字。0 表示的是这个位置上的数字初始时就能看见了,而不是彩票上的数字为 0。 然后给出玩家刮开的三个位置,分为三行,每行按格式 x y 给出玩家刮开的位置的行号和列号。 最后给出玩家选择的方向,即一个整数:1 至 3 表示选择横向的第一行、第二行、第三行,4 至 6 表示纵向的第一列、第二列、第三列,7、8分别表示左上到右下的主对角线和右上到左下的副对角线。

    输出部分:输出刮开数字的总和。

    示例输入: 1 2 3 4 5 6 7 8 0 1 1 2 2 2 3 7

    示例输出: 1 5 6 180

    解决方案: 由于要计算刮开数字的总和,首先需要将刮开的数字与彩票的数字进行对应,然后根据给定的方向计算刮开数字的总和。

    具体步骤如下: 1. 创建一个二维数组a[4][4],用来保存彩票上的数字。再创建一个二维数组b[4][4],用来保存玩家刮开的数字。 2. 使用两个for循环读取输入,将彩票上的数字保存到数组a[4][4]中。同时计算初始数字的总和sum,并记录数字为0的位置(i1, j1)。 3. 计算初始数字的总和sum: sum = a[1][1] + a[1][2] + a[1][3] + a[2][1] + a[2][2] + a[2][3] + a[3][1] + a[3][2] + a[3][3]。 4. 根据初始数字的总和sum计算刮开的数字的值,并将初始数字的值保存到数组b[4][4]中:b[i1][j1] = 45 - sum。 5. 使用一个for循环读取玩家刮开的位置,将刮开的数字保存到数组b[4][4]中,并输出刮开的数字。 6. 使用一个变量x读取玩家选择的方向。 7. 创建一个函数f(int x, int b[4][4])用来根据给定的方向计算刮开数字的总和。 - 如果方向为1、2或3,即横向的第一行、第二行、第三行,遍历数组b的第x行,并累加数字的值。 - 如果方向为4、5或6,即纵向的第一列、第二列、第三列,遍历数组b的第x-3列,并累加数字的值。 - 如果方向为7,即左上到右下的主对角线,遍历数组b的左上到右下的对角线,并累加数字的值。 - 如果方向为8,即右上到左下的副对角线,遍历数组b的右上到左下的对角线,并累加数字的值。 - 根据刮开数字的总和sum的值,使用switch语句计算刮开数字的奖金金额t。 8. 输出刮开数字的总和sum和对应的奖金金额t。

    优化方案: 该代码没有明显的可优化的地方,已经实现了题目要求的功能,因此不需要进行优化。

    备注:请注意,由于输入没有给出完整的代码,最后一个switch语句的case部分尚未完成,需要填写完整。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月30日

悬赏问题

  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥100 解决数据不连续出现问题
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误