解题思路:
利用字符数组来实现空格和X的的变换,其次找到打印规律。
注意事项:
注意一:题目输出的是X,而不是x,晃眼一看很容易写成小写,这样很不容易发现错误。
注意二:输入包含多组测试数据。第一个整数N(N<=15),N表示组数,每组数据包含两个整数a,b。这里说的多组数据并不是有多组N,a,b的意思,而是说多组数据是由N控制,它决定组数,没有多组的N,否则就会输出超限
注意三:单纯的输出一个完整的DNA形状较为简单,多个重复我们就需要找规律(这是题目的关键)我的发现如下图
通过图示我们可以知道,每一组数据需要一个循环(S1)来走重复打印的次数,在S1内部我们需要一个循环S2来实现每一个S1所打印的行数,在S2中我们需要一个循环S3来实现每一行字符数组的打印,就是3重循环。
代码部分我们做的是最后单独打印最后一行。
参考代码:
#include<stdio.h> int main() { int N,a,b,j,k,i; scanf("%d",&N); char ch[40];//将字符数组全部初始化为空格,在需要打印哪一行时将对应的部分改为X,打印完成,又换回空格 for(i=0;i<40;i++) ch[i]=' '; while(N--)//当全部组数打印完,跳出循环 { scanf("%d %d",&a,&b); for(i=0;i<b;i++)//循环S1 { for(k=0;k<a-1;k++)//循环S2 { ch[k]=ch[a-k-1]='X'; for(j=0;j<a;j++)循环S3 printf("%c",ch[j]); printf("\n"); ch[k]=ch[a-k-1]=' '; } } ch[0]=ch[a-1]='X';//单独打印剩的那一行 for(j=0;j<a;j++) printf("%c",ch[j]); printf("\n\n"); ch[0]=ch[a-1]=' '; } return 0; }
有问题的同学欢迎讨论,我们互相成长,一起变强!
0.0分
34 人评分
#include<stdio.h> int main() { /*2 3 1 5 4*/ int n,a,b; int c[39]; int d[20]; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d",&a,&b); c[i]=a; d[i]=b; } for(int i=0;i<n;i++) { for(int j=0;j<d[i];j++) { for(int m=1;m<=c[i];m++) { for(int n=1;n<=c[i];n++) { if(n<=c[i]/2+1) { if(n==m||n==c[i]-m+1) printf("X"); else printf(" "); } else { int k; k=c[i]-n+1; if(k==m||k==c[i]-m+1) printf("X"); else printf(" "); } } printf("\n"); } printf("\n"); } printf("\n"); } return 0; }
云天明 2021-04-17 00:57:12 |
大佬为什么这个不对呢
九宫重排 (C++代码)浏览:2160 |
数组输出 (C语言代码)错误???浏览:565 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:916 |
字符逆序 (C语言代码)浏览:643 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:517 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:646 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:566 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:573 |
C二级辅导-公约公倍 (C语言代码)浏览:1311 |
C语言程序设计教程(第三版)课后习题10.1 (C++代码)浏览:502 |
zqz 2021-05-17 21:43:48 |
用数组会多开空间,空间复杂度变高
三重岁月 2021-05-29 17:18:51 |
可这个时间复杂度挺高的