错误代码
错误原因:代码22行23行采用了直接输出对于n>1情况都会那样走的a[1][1]和a[1][2],却忘记了n=1,所以一直显示超时(还真没想到样例里边有n = 1 ,awsl)
#include <iostream>
using namespace std;
int a[501][501] = {0};
int main()
{
//cout << "Hello world!" << endl;
int n;
cin>>n;
for(int i = 1; i <= n;i++)
for(int j = 1; j <= n;j++)
cin>>a[i][j];
int sum = 1;
int flag = 0;//flag == 0 向斜下走
int x = 1; //纵坐标 //flag == 1 向斜上走
int y = 2; //横坐标
cout<<a[1][1]<<" ";
cout<<a[1][2]<<" ";
while(sum != n*n-1){
if(flag == 0){
while(y > 1&&x < n){
x++;
y--;
cout<<a[x][y]<<" ";
sum++;
if( x == n){
y++;
cout<<a[x][y]<<" ";
sum++;
flag = 1;
}
else if(y == 1){
x++;
cout<<a[x][y]<<" ";
sum++;
flag = 1;
}
}
}
else if(flag == 1){
while(x > 1&&y < n){
y++;
x--;
cout<<a[x][y]<<" ";
sum++;
if(y == n){
x++;
cout<<a[x][y]<<" ";
sum++;
flag = 0;
}
else if(x == 1){
y++;
cout<<a[x][y]<<" ";
sum++;
flag = 0;
}
}
}
}
return 0;
}
正确代码
#include <iostream>
using namespace std;
int a[501][501] = {0};
int main()
{
//cout << "Hello world!" << endl;
int n;
cin>>n;
for(int i = 1; i <= n;i++)
for(int j = 1; j <= n;j++)
cin>>a[i][j];
if( n == 1 )
cout<<a[1][1];
else{
int sum = 1;
int flag = 0;//flag == 0 向斜下走
int x = 1; //纵坐标 //flag == 1 向斜上走
int y = 2; //横坐标
cout<<a[1][1]<<" ";
cout<<a[1][2]<<" ";
while(sum != n*n-1){
if(flag == 0){
while(y > 1&&x < n){
x++;
y--;
cout<<a[x][y]<<" ";
sum++;
if( x == n){
y++;
cout<<a[x][y]<<" ";
sum++;
flag = 1;
}
else if(y == 1){
x++;
cout<<a[x][y]<<" ";
sum++;
flag = 1;
}
}
}
else if(flag == 1){
while(x > 1&&y < n){
y++;
x--;
cout<<a[x][y]<<" ";
sum++;
if(y == n){
x++;
cout<<a[x][y]<<" ";
sum++;
flag = 0;
}
else if(x == 1){
y++;
cout<<a[x][y]<<" ";
sum++;
flag = 0;
}
}
}
}
}
return 0;
}