解题思路:
1.对每一组输入的a, b ,确定 行(row) 和 列(等于a的值) 后,遍历每一个位置,若处于对角线(主、副 对角线),则打印X,否则打印空格; 2.观察原图形(譬如 a=5, b=4),除去第一行,后面的(a-1)行 均重复 b 次,则需要打印的总行数 = (a-1) * b + 1 (此时需要把除去的第一行加回来); 3.对于列,每一个 小单位(未重复的部分) 按照正方形 打印,其列数 等于 a 。
注意事项:
1.在遍历前,需要设置 开始值begin (初值为1,因为每组输入后,第一个元素 就是X),以确定 打印完一行后 下一次开始 打印X 的位置 ; 2.在判断对角线时,j==begin 表示主对角线(从左上 到 右下),j==a + 1 - begin 表示副对角线(从右上 到 左下); 3.每打印完一行,begin 自增1(沿着 主对角线 向下),若越界(超过 列数a,即 等于a+1),则赋 初值2 (观察原图形,下一个小单位的开头 在2的位置); 4.每打印完一行,需要 puts("") 来换行; 5.每完成 一组输入 ,需要 puts("") 来换行。
参考代码:
#include<stdio.h> int main() { int n, a, b, row, begin; scanf("%d", &n); while(n --){ scanf("%d %d", &a, &b); row = (a - 1) * b + 1; begin = 1; for(int i = 1; i <= row; i ++){ for(int j = 1; j <= a; j ++) if(j == begin || j == a + 1 - begin) printf("X"); else printf(" "); if(++ begin == a + 1) begin = 2; puts(""); } puts(""); } return 0; }
0.0分
1 人评分
C二级辅导-阶乘数列 (C语言代码)浏览:642 |
母牛的故事 (C语言代码)浏览:1408 |
C语言程序设计教程(第三版)课后习题8.1 (Java代码)浏览:828 |
蛇行矩阵 (C语言代码)浏览:792 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:660 |
完数 (C语言代码)浏览:757 |
Cylinder (C语言描述,蓝桥杯)浏览:1279 |
A+B for Input-Output Practice (VI) (C语言代码)浏览:575 |
1051(奇了怪了)浏览:747 |