本人大一萌新,由于自身知识和经验的匮乏,对于很多编程题都没有明确的思路,我希望能够通过分享一些自己在C语言学习过程中的小经验 ,来提升自己的能力,希望也能够帮到大家~~
【题目描述】
仿照样例的格式,打印不同方向的矩形和三角形,两者之间存在一个空行。
【输入输出格式】
输入格式:输入矩阵的规模不超过9
输出格式:输出矩形和三角形,矩形和三角形之间有一个空行
【样例】
- #1
输入:4
输出:
01020304 05060708 09101112 13141516 01 0203 040506 07080910#2
输入:9
输出:
010203040506070809
101112131415161718
192021222324252627
282930313233343536
373839404142434445
464748495051525354
555657585960616263
646566676869707172
73747576777879808101
0203
040506
07080910
1112131415
161718192021
22232425262728
2930313233343536
373839404142434445
【题目分析】
做到这个题目的时候,我发现很多题解都采用了要判断是否自动补0,其实在这个题目中,自动补零这个操作实则没有必要,这里我们需要采用一种特殊的输出格式就可以解决。
我们都知道,printf 可以控制输出的域宽,如:
int a = 4;
printf("%4d",a); 这里的输出结果就是:***4 (用"*"表示空格)
但实际上,printf 也可以控制输出数据的格式,当不满足域宽时,自动补0,如:
int a = 4;
printf("%02d",a); 这里表示输出的域宽为2,当数据不满足域宽时,此时将自动补0,使数据靠右对齐。
既然解决了自动补0的问题,这个题的解法也就显而易见了,下面附上我的代码(C语言):
#include <stdio.h>
int main()
{
int m;
scanf("%d", &m);
//利用count实现输出
int count = 1;
//打印矩形
for (int i = 1; i <= m ; i++) {
for (int j = 1; j <= m ; j++) {
//这里利用了一种特殊的输出方式,使得在未满足域宽前,自动补0
printf("%02d", count);
count++;
if (j % m == 0)
printf("\n");
}
}
count = 1;
printf("\n");
//打印三角形
for (int k = 1; k <= m; k++) {
for (int n = 1; n <= m; n++) {
if (n <= m - k)
printf(" ");
else {
printf("%02d", count);
count++;
}
if (n == m)
printf("\n");
}
}
}
这是萌新第一次分享自己C语言学习过程中的一些小小的想法,希望大佬指正~!