解题思路:
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 人评分
简单的a+b (C语言代码)浏览:667 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:738 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:575 |
简单的a+b (C语言代码)浏览:334 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:956 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:867 |
1017题解浏览:571 |
C语言程序设计教程(第三版)课后习题12.5 (C语言代码)浏览:757 |
班级人数 (C语言代码)浏览:919 |
小O的图案 (C语言代码)浏览:909 |