消除类游戏的程序,哪里有问题吗?

得分一直都是80分,但是运行结果又没有问题
题目:
题目5:消除类游戏

问题描述

  消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。

  现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。

  请注意:一个棋子可能在某一行和某一列同时被消除。

输入格式

  输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。

  接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。

输出格式

  输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。

样例输入1

4 5

2 2 3 1 2

3 4 5 1 4

2 3 2 1 3

2 2 2 4 4

样例输出1

2 2 3 0 2

3 4 5 0 4

2 3 2 0 3

0 0 0 4 4

样例说明

  棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。

样例输入2

4 5

2 2 3 1 2

3 1 1 1 1

2 3 2 1 3

2 2 3 3 3

样例输出2

2 2 3 0 2

3 0 0 0 0

2 3 2 0 3

2 2 0 0 0

样例说明

  棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。

评测用例规模与约定

所有的评测用例满足:1 ≤ n, m ≤ 30。
代码:
#include <stdio.h>
int main()
{
int m,n,i,j,k;
scanf("%d %d",&m,&n);//m,n分别为行、列
int flag[m][n];
int game[m][n];
if((n>=3&&n<=30)&&(m>=3&&m<=30))
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
flag[i][j]=0;
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
while(1)
{
scanf("%d",&game[i][j]);
if((game[i][j]>=1)&&(game[i][j]<=9))
break;
}
}
}
for(i=0;i<m;i++)//行相同的问题
{
for(j=1;j<n;j++)
{
if(game[i][j-1]==game[i][j]&&game[i][j]==game[i][j+1])
{
flag[i][j-1]=1;
flag[i][j]=1;
flag[i][j+1]=1;
for(k=1;k<n-j-1;k++)
{
if(game[i][j+1]==game[i][j+1+k])
flag[i][j+1+k]=1;
else break;
}
}
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(game[i][j]==game[i+1][j]&&game[i+2][j]==game[i+1][j])
{
flag[i][j]=1;
flag[i+1][j]=1;
flag[i+2][j]=1;
for(k=1;k<n-j-1;k++)
{
if(game[i+1][j]==game[i+1+k][j])
flag[i+1+k][j]=1;
else break;
}
}
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(flag[i][j]==1)//通过flag标记,在这之前,数组元素并不改变
{
game[i][j]=0;
}
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",game[i][j]);
if(j==n-1)
printf("\n");
}
}
}
else if(m>=1&&m<=2&&n>=1&&n<=2)
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
while(1)
{
scanf("%d",&game[i][j]);
if((game[i][j]>=1)&&(game[i][j]<=9))
break;
}
}
}

    for(i=0;i<m;i++)
   {
        for(j=0;j<n;j++)
        {
        printf("%d ",game[i][j]);
        if(j==n-1)
        printf("\n");
        }
   }
}
    return 0;

}

game[i][j+1]可能越界啊