第一题:
思路:这种简单排版题一般都可以用具体的表达式来计算出来。只需要找出行数和输出*
的数目之间的关系就可以了。
代码如下:
#include<stdio.h>
int main(){
int h;
while(scanf("%d",&h)!=EOF){
int t=(h-1)*2+h;
for(int i=0;i<h;i++){
for(int j=0;j<t;j++){
if(j<t-((i)*2+h))printf(" ");
else printf("*");
}
printf("\n");
}
}
return 0;
}
第二题:
思路:像这种不好输出的,需要预先定义一个数组,现在数组里面排好版,然后输出数组即可。
#include<stdio.h>
int a[80][80];
bool firstCase=true;//约定第一个图案不用输出换行,其他的都需要输出一个换行
int main(){
int s;
char c1;
char c2;
freopen("in.txt","r",stdin);
while(scanf("%d %c %c",&s,&c1,&c2)!=EOF){
if(firstCase){
firstCase=false;
}
else{
printf("\n");
}
int length=s/2;
int center=length+1;
a[center][center]=c1;
for(int i=1;i<=length;i++){
char tmp;
if(i%2==0)tmp=c1;
else tmp=c2;
for(int j=center-i;j<=center+i;j++){
a[center-i][j]=tmp;
a[center+i][j]=tmp;
a[j][center-i]=tmp;
a[j][center+i]=tmp;
}
}
if(s!=1){
a[1][1]=' ';
a[1][s]=' ';
a[s][1]=' ';
a[s][s]=' ';
}
for(int a1=1;a1<=s;a1++){
for(int b1=1;b1<=s;b1++){
printf("%c",a[a1][b1]);
}
printf("\n");
}
}
return 0;
}