首先题目给出的例子都是带有提示性的,我们看n=3,n=4的异同,找出大致规律,得知我们要分奇偶数情况来输出 戳视频链接:螺旋阵视频讲解 再次声明,我没有备稿呀,有一点点憨憨的哈哈哈~ 这种类型题目,其实最关键的是我们要找出思路,我们应该怎么样来一步步的存储,这个问题解决了,基本上问题就得以解决了 我们这里以层为单位,每层又分为4个部分,左侧,下方,右侧,上方,并且设置外层循环变量i,内层循环变量j,我们需要找出i和j的关系即可 这里我画了一个图帮助大家理解: 在控制输出时,因为我们输入的n是不确定的,所以最大位数n*n的位数是不确定的,在控制输出时,应该使用 %*d,然后表示出星号即可算法题目
算法分析
printf("%*d ",count,s[i][j]); //输入可变的位数应该用%*d
代码实现
#include<stdio.h> //spiral array 螺旋阵 //1 12 11 10 //2 13 16 9 //3 14 15 8 //4 5 6 7 int s[100][100]; //大数组放在外面哦~ int main() { int n; //表示n*n矩阵 int i,j; //i表示外层循环变量 j表示层内循环变量 int k=1; //数组起始数据 int m; //m=n*n int count=0; //存储m的位数 printf("请输入你想输出哪一阶矩阵(n):n"); scanf("%d",&n); m=n*n; for(i=1;i<=n/2;i++) { for(j=i;j<=n-i;j++) { s[j][i]=k; k++; } for(j=i;j<=n-i;j++) { s[n-i+1][j]=k; k++; } for(j=n-i+1;j>=i+1;j--) { s[j][n-i+1]=k; k++; } for(j=n-i+1;j>=i+1;j--) { s[i][j]=k; k++; } } if(n%2==1) //奇数行特殊处理 { i=(n+1)/2; s[i][i]=m; } while(m!=0) { count++; m=m/10; } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("%*d ",count,s[i][j]); //输入可变的位数应该用%*d } printf("n"); } return 0; }
结果示例
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算