我又又又又来看题目了,今天是蛇形矩阵。
#include<iostream>
using namespace std;
int a[105][105];
int n;
int i=1,j=0,num=0;
int main(){
cin>>n;
while(num<n*n){
while(j<n&&!a[i][j+1]){
j++;
a[i][j]=num;
num++;
}
while(i<n&&!a[i+1][j]){
i++;
a[i][j]=num;
num++;
}
while(j>1&&!a[i][j-1]){
j--;
a[i][j]=num;
num++;
}
while(i>1&&!a[i-1][j]){
i--;
a[i][j]=num;
num++;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
其实还可以简化。
简化这些代码:
while(j<n&&!a[i][j+1]){
j++;
a[i][j]=num;
num++;
}
while(i<n&&!a[i+1][j]){
i++;
a[i][j]=num;
num++;
}
while(j>1&&!a[i][j-1]){
j--;
a[i][j]=num;
num++;
}
while(i>1&&!a[i-1][j]){
i--;
a[i][j]=num;
num++;
}
while(j<n&&!a[i][j+1]){
j++;
a[i][j]=num;
num++;
}
可以简化成:
while(j<n&&!a[i][j+1]){
a[i][++j]=++num;
}
我们都知道,for循环.while循环.if判断......如果只有一句话,可以省略{}。
还可以简化成:
while(j<n&&!a[i][j+1])a[i][++j]=++num;
终极简化答案:
#include<iostream>
#include<iomanip>
using namespace std;
int a[105][105];
int n;
int i=1,j=0,num=0;
int main(){
cin>>n;
while(num<n*n){
while(j<n&&!a[i][j+1])a[i][++j]=++num;
while(i<n&&!a[i+1][j])a[++i][j]=++num;
while(j>1&&!a[i][j-1])a[i][--j]=++num;
while(i>1&&!a[i-1][j])a[--i][j]=++num;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
代码就是这么神奇!