输入第一部分给出一张合法的彩票,即用 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,求指出哪有问题,谢谢。