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");
}
//请教各位专业人士这个中间的循环能用中文翻译一遍嘛😭
C语言螺旋方阵程序循环设计
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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"); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥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部署量化回测异常问题