如何用C语言for循环打印指定数字图案?原代码仅适配输入4
问题
我尝试了如下C语言代码,但该代码仅能在输入为4时正确打印目标数字图案,输入5、2等其他数值时均无法正常运行。请问如何修改该程序,使其匹配输入2、5、7时的预期输出?
预期输出示例
- 输入:
2
2 2 2 2 1 2 2 2 2
- 输入:
5
5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 5 5 4 3 3 3 3 3 4 5 5 4 3 2 2 2 3 4 5 5 4 3 2 1 2 3 4 5 5 4 3 2 2 2 3 4 5 5 4 3 3 3 3 3 4 5 5 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5
- 输入:
7
7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 7 7 6 5 5 5 5 5 5 5 5 5 6 7 7 6 5 4 4 4 4 4 4 4 5 6 7 7 6 5 4 3 3 3 3 3 4 5 6 7 7 6 5 4 3 2 2 2 3 4 5 6 7 7 6 5 4 3 2 1 2 3 4 5 6 7 7 6 5 4 3 2 2 2 3 4 5 6 7 7 6 5 4 3 3 3 3 3 4 5 6 7 7 6 5 4 4 4 4 4 4 4 5 6 7 7 6 5 5 5 5 5 5 5 5 5 6 7 7 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7
现有代码
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> int main() { int n; scanf("%d", &n); // Complete the code to print the pattern. int limit = (n * 2) - 1; int row, column; for (row = 1; row <= limit; row++) { for (column = 1; column <= limit; column++) { if (column == 1 || column == 7 || row == 1 || row == 7) printf("%d ", n); else if (column == 2 || column == 6 || row == 2 || row == 6) printf("%d ", n - 1); else if (column == 3 || column == 5 || row == 3 || row == 5) printf("%d ", n - 2); else if (column == 4 || column == 4 || row == 4 || row == 4) printf("%d ", n - 3); } printf("\n"); } return 0; }
解决方案
问题分析
现有代码的核心问题是硬编码了固定的列数、行数判断条件(比如column ==7、row==6等),这些数值仅对应输入n=4时的边界(limit=7),换其他输入时逻辑完全失效。
要实现通用的图案生成,需找到每个位置(row, column)的数值规律:每个位置的数值等于n减去该位置到图案四个边界的最小距离。
修改后的代码
#include <stdio.h> int main() { int n; scanf("%d", &n); int limit = 2 * n - 1; int row, column; for (row = 1; row <= limit; row++) { for (column = 1; column <= limit; column++) { // 计算当前位置到四个边界的距离 int top = row; int bottom = limit - row + 1; int left = column; int right = limit - column + 1; // 取四个距离中的最小值 int min_dist = top; if (bottom < min_dist) min_dist = bottom; if (left < min_dist) min_dist = left; if (right < min_dist) min_dist = right; // 输出对应数值 printf("%d ", n - min_dist + 1); } printf("\n"); } return 0; }
逻辑说明
以输入n=2为例,limit=3:
- 角落位置(如(1,1)):四个距离均为1,
min_dist=1,数值为2-1+1=2,符合预期; - 中心位置(2,2):四个距离均为2,
min_dist=2,数值为2-2+1=1,符合预期。
输入n=5时,中心位置(5,5)的四个距离均为5,数值为5-5+1=1,完全匹配预期图案。
内容的提问来源于stack exchange,提问作者No_name_instant
相关产品推荐
相关产品推荐

