文章标题
2017-10-02 19:49
169 查看
`
这道题当时第一眼见到的时候,感觉真的是一脸懵逼,真的不知道是怎么一回事,最后想了一下,不就是回环的进行填数吗,于是我就尝试用了很多while循环,于是就改了好久,终于AC了,这道题当然现在看,可能没有那么难,可是却实伤了脑细胞啊!!不说了,贴代码。
蛇形填数
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述
在n*n方陈里填入1,2,…,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3
样例输出
7 8 1
6 9 2
5 4 3
“`
这道题当时第一眼见到的时候,感觉真的是一脸懵逼,真的不知道是怎么一回事,最后想了一下,不就是回环的进行填数吗,于是我就尝试用了很多while循环,于是就改了好久,终于AC了,这道题当然现在看,可能没有那么难,可是却实伤了脑细胞啊!!不说了,贴代码。
蛇形填数
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述
在n*n方陈里填入1,2,…,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3
1 2
样例输出
7 8 1
6 9 2
5 4 3
`` #include<iostream> using namespace std; int main(){ int n; cin>>n; int a ; int flag=1;//设置flag进行标记循环了几圈, int num1=0,num2; int i=0; int biaozhi=0;//找到推出的条件设置标志位 while(1){ num2=n-flag;// while(num1<=n-flag){ i++; a[num1++][num2]=i; if(i==n*n){ biaozhi=1; break; } } num1--;//多加的就要减下来 num2--; if(biaozhi==1)break; while(num2>=flag-1){ i++; a[num1][num2--]=i; if(i==n*n){ biaozhi=1; break; } } if(biaozhi==1)break; num2++; num1--; while(num1>=flag-1){ i++; a[num1--][num2]=i; if(i==n*n){ biaozhi=1; break; } } if(biaozhi==1)break; num1++; num2++; while(num2<=n-flag-1){ i++; a[num1][num2++]=i; if(i==n*n){ biaozhi=1; break; } } if(biaozhi==1)break; flag++; num2--; num1++; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout<<a[i][j]<<" "; } cout<<endl; } return 0; }
“`