|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 学员3y8246208 于 2025-6-4 20:23 编辑
源码:
- #include<stdio.h>
- int main(){
- int n,i,j;
- scanf("%d",&n);
- for(i=1;i<=n;i++){
- for(j=1;j<=2*(n-i);j++)
- printf(" ");
- if(i!=1)
- printf("1 ");
- for(j=1;j<=i-1;j++)
- printf("%d ",j+1);
- for(j=1;j<=i-2;j++)
- printf("%d ",i-j);
- printf("1");
- printf("\n");
- }
- for(i=1;i<=n-1;i++){
- for(j=1;j<=2*i;j++)
- printf(" ");
- if(i!=n-1)
- printf("1 ");
- for(j=1;j<=n-i-1;j++)
- printf("%d ",j+1);
- for(j=1;j<=n-i-2;j++)
- printf("%d ",n-i-j);
- printf("1");
- printf("\n");
- }
- }
复制代码
打印一位整数未错位:
- 6
- 1
- 1 2 1
- 1 2 3 2 1
- 1 2 3 4 3 2 1
- 1 2 3 4 5 4 3 2 1
- 1 2 3 4 5 6 5 4 3 2 1
- 1 2 3 4 5 4 3 2 1
- 1 2 3 4 3 2 1
- 1 2 3 2 1
- 1 2 1
- 1
- --------------------------------
- Process exited after 2.06 seconds with return value 5
- 请按任意键继续. . .
复制代码
打印出现两位整数时错位:
- 20
- 1
- 1 2 1
- 1 2 3 2 1
- 1 2 3 4 3 2 1
- 1 2 3 4 5 4 3 2 1
- 1 2 3 4 5 6 5 4 3 2 1
- 1 2 3 4 5 6 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 13 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 12 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 11 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
- 1 2 3 4 5 6 7 6 5 4 3 2 1
- 1 2 3 4 5 6 5 4 3 2 1
- 1 2 3 4 5 4 3 2 1
- 1 2 3 4 3 2 1
- 1 2 3 2 1
- 1 2 1
- 1
- --------------------------------
- Process exited after 5.186 seconds with return value 19
- 请按任意键继续. . .
复制代码
问题:求打印多位整数也不错位的办法,感谢。
#include <stdio.h>
int main() {
int n, i, j, num;
scanf("%d", &n);
// 计算最大数字的位数,用于格式化输出
int max_num = n;
int width = 1;
while (max_num /= 10) width++;
// 上半部分
for (i = 1; i <= n; i++) {
// 前置空格
for (j = 1; j <= n - i; j++)
printf("%*s", width + 1, "");
// 左侧数字序列
for (j = 1; j <= i; j++)
printf("%*d ", width, j);
// 右侧数字序列(倒序,不包括中间和第一个数字)
for (j = i - 1; j >= 1; j--)
printf("%*d ", width, j);
printf("\n");
}
// 下半部分
for (i = n - 1; i >= 1; i--) {
// 前置空格
for (j = 1; j <= n - i; j++)
printf("%*s", width + 1, "");
// 左侧数字序列
for (j = 1; j <= i; j++)
printf("%*d ", width, j);
// 右侧数字序列(倒序,不包括中间和第一个数字)
for (j = i - 1; j >= 1; j--)
printf("%*d ", width, j);
printf("\n");
}
return 0;
}
|
|