Sᴴᴺ 2022-06-22 09:27 采纳率: 50%
浏览 45
已结题

C语言螺旋方阵程序循环设计

int i,j,k,s,n;
int a[N][N];
printf("请输入方阵类型\n");
scanf("%d",&n);
k=1;s=0;i=0;
while (k<=n*n){
for (j=s;j<n-s;j++){
a[i][j]=k++;
}
j--;
for (i=s+1;i<n-s;i++){
a[i][j]=k++;
}
i--;
for (j=n-s-2;j>=s;j--){
a[i][j]=k++;
}
j++;
for (i=n-s-2;i>=s+1;i--){
a[i][j]=k++;
}
i++;
s++;
}
for (i=0;i<n;i++){
for (j=0;j<n;j++){
printf("%4d",a[i][j]);
}
printf("\n");
}
//请教各位专业人士这个中间的循环能用中文翻译一遍嘛😭

  • 写回答

2条回答 默认 最新

  • emXiaoMing 2022-06-22 12:13
    关注

    就是从最外层开始生成一个螺旋方阵

    
    #define N 10
    int main()
    {
        int i, j, k, s, n;
        int a[N][N];
        printf("请输入方阵类型\n");
        scanf("%d", &n); 
        n = 5;//为了给你展示方便,这里n取5
        k = 1; s = 0; i = 0;    //这里s应该代表圈
        while (k <= n * n) {            //整个矩阵填充满后停止
            for (j = s; j < n - s; j++) {   //横坐标不变,纵坐标从s到n-s-1放入k值,比如最外圈(第0圈):从a[0][0]到a[0][4] 为 1 2 3 4 5
                a[i][j] = k++;
            }
            j--;   //j多加了1,所以减回来,比如最外圈(第0圈):此时j = 5 - 1 = 4
            for (i = s + 1; i < n - s; i++) {   //纵坐标不变,横坐标从s+1到n-s-1放入k值,比如最外圈(第0圈):从a[1][4]到a[4][4] 为 6 7 8 9
                a[i][j] = k++;
            }
            i--;    //i多加了1,所以减回来,比如最外圈(第0圈):此时i = 5 - 1 = 4
            for (j = n - s - 2; j >= s; j--) {  //横坐标不变,纵坐标从n-s-2到s放入k值,比如最外圈(第0圈):从a[4][3]到a[4][0] 为 10 11 12 13
                a[i][j] = k++;
            }
            j++;    //j多减了1,所以加回来 ,比如最外圈(第0圈):此时j = -1 + 1 = 0
            for (i = n - s - 2; i >= s + 1; i--) {  //纵坐标不变,横坐标从n-s-2到s+1放入k值,比如最外圈(第0圈):从a[3][0]到a[1][0] 为 14 15 16
                a[i][j] = k++;
            }
            i++;    //i多减了1,所以加回来   ,比如最外圈(第0圈):此时i = 0 + 1 = 1
            s++;    //下一圈
        }
        for (i = 0; i < n; i++) {       //打印整个方阵
            for (j = 0; j < n; j++) {
                printf("%4d", a[i][j]);
            }
            printf("\n");
        }
    
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月30日
  • 已采纳回答 6月22日
  • 创建了问题 6月22日

悬赏问题

  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题