首先要说明的是,这是一道很好的二维数组转向练习题,因此 不可能! 不会太水
给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。
从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有的会占用 3 个字符,前面使用空格补齐。
输入输出样例输入#1:
4
输出#1:
1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
可见,规律为:右 → 下 → 左 → 上
代码实现定义输入不解释
#includeusing namespace std; int cube[105][105]; int main () { int n,cnt=0,x=1,y=1; //cnt表示当前操作,x和y分别表示横纵坐标 cin>>n; //输入 return 0; }
首先,把第一个数赋值为1
cube[1][1]=1; //赋值
然后,for循环填数
for(int i=1;i<=n*n;i++) {
//...模拟代码
}
接下来,把每个点赋值
cube[x][y]=i; //赋值
最重要的来了,我们需要模拟每一种情况
模拟第一种情况(向右):
if(cnt%4==0 && y模拟第二种情况(向下):
else if(cnt%4==1 && x模拟第三种情况(向左):
else if(cnt%4==2 && y>1 && cube[x][y-1]==0) y=y-1; //y坐标更新模拟第四种情况(向上):
else if(cnt%4==3 && x>1 && cube[x-1][y]==0) x=x-1; //x坐标更新cnt更新代码
else { cnt++; if(cnt%4==0) y=y+1; else if(cnt%4==1) x=x+1; else if(cnt%4==2) y=y-1; else if(cnt%4==3) x=x-1; }最后,输出!
for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(cube[i][j]>=10){ //判断是否为十位数 cout<<" "<cout<<" "< 整合代码如下:
#includeusing namespace std; int cube[105][105]; int main () { int n,cnt=0,x=1,y=1; cin>>n; cube[1][1]=1; for(int i=1;i<=n*n;i++) { cube[x][y]=i; if(cnt%4==0 && y 1 && cube[x][y-1]==0) y=y-1; else if(cnt%4==3 && x>1 && cube[x-1][y]==0) x=x-1; else { cnt++; if(cnt%4==0) y=y+1; else if(cnt%4==1) x=x+1; else if(cnt%4==2) y=y-1; else if(cnt%4==3) x=x-1; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(cube[i][j]>=10){ cout<<" "< cout<<" "<
当然啦,还有一种方法,不建议大家使用:打表
代码就不放了,打表法太水了总体来说,这道题还是一道不错的题,适合练习二维数组和循环
暑期编程PK赛 得CSDN机械键盘等精美礼品!



