藏在奶油里 2021-11-13 18:48 采纳率: 60%
浏览 416
已结题

C/C++ 方形盘龙(关于数组的问题)

题目都看不懂,有人帮忙看看吗?
题目描述:生活中,逢年过节舞龙灯的传统,长长的龙身,可以一字展开,也可以盘曲起来。现在请你编程模拟盘龙的形状。为了简化,此处的盘龙形状不是圆形,而是方形。
模拟展示一个形如盘龙的数组呢?龙头在左上角,按顺时针方向由外向内盘踞。
输入:第一行为一个整数,表示测试用例的个数。其后的每一行,有个整数n(1 < = n < = 30 )。
输出:对每个n×n正方形数组,请参照输出样例,输出盘龙状数组。为了对齐,每个数组元素占4个字符宽度,并且,不足4个字符的按向右对齐输出。每个测试用例的输出之后有一个空行。

注意每行末尾没有空格。
样例输入:
3
1
2
5
样例输出:
1

1 2
4 3

1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

  • 写回答

1条回答 默认 最新

  • 「已注销」 2021-11-13 19:24
    关注
    #include<iostream>
    #include<cstring>
    #include<iomanip>
    using namespace std;
    int a[20][20];
    int main() {
        int t,n,k,direct;
        cin>>t;
        for(int c=0; c<t; c++) {
            direct=4;
            cin>>n;
            int i=0,j=0;
            k=1;
            memset(a,0,sizeof(a));
            while(k<=n*n) {
                if(a[i][j]==0) {
                    a[i][j]=k;
                    k++;
                }
                if(direct == 1) { //向上
                    i--;//行减1
                    if(i==-1||a[i][j]!=0) {
                        direct=4;
                        i++;
                        j++;
                    }
                } else if(direct == 2) {
                    i++;
                    if(i==n||a[i][j]!=0) {
                        direct=3;
                        i--;
                        j--;
                    }
                } else if(direct == 3) {
                    j--;
                    if(j==-1||a[i][j]!=0) {
                        direct=1;
                        i--;
                        j++;
                    }
                } else if(direct == 4) { 
                    j++;
                    if(j==n||a[i][j]!=0) {
                        direct=2;
                        i++;
                        j--;
                    }
                }
            }
            for(i=0; i<n; i++) {
                for(j=0; j<n; j++) {
                    cout<<setw(4)<<a[i][j] <<" ";
                }
                cout<<endl;
            }
            cout<<endl;
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月21日
  • 已采纳回答 11月13日
  • 创建了问题 11月13日

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记