【ACM算法】-- 排版篇 - 图案问题

第一题:
在这里插入图片描述
思路:这种简单排版题一般都可以用具体的表达式来计算出来。只需要找出行数和输出*的数目之间的关系就可以了。

代码如下:

#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;
}


发布了83 篇原创文章 · 获赞 15 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_42127861/article/details/104283559