排版类问题(输出各种图形)

类型一:对于输出有规律的

例 九度1065 输出梯形

题目描述:

输入一个高度h,输出一个高为h,上底边为h的梯形。

输入:

一个整数h(1<=h<=1000)。

输出:

h所对应的梯形。

样例输入:
4
样例输出:
      ****
    ******
  ********
**********
#include<stdio.h>
int main(int argc, char* argv[])
{
	int h;
	while(scanf("%d",&h)!=EOF)
	{
		int i,j;
		int t=h+(h-1)*2; //梯形底边长度
		for(i=1;i<=h;i++)
		{
			for(j=1;j<=t;j++)
			{
				if(j<=(t-h)-2*(i-1))	printf(" ");
				else	printf("*");
			}
			printf("\n");
		}
	}
	return 0;
}

类型二:对于难以找出规律的,先排版(给数组元素赋值),最后再整体输出数组

例1:九度1432 叠筐

题目描述:

把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

输入:

输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;

输出:

输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。

样例输入:
11 B A 
5 @ W
样例输出:
 AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
 AAAAAAAA

 @@@
@WWW@
@W@W@
@WWW@
 @@@

#include<stdio.h>
int main(int argc, char* argv[])
{	
	int n;	
	char a,b;
	bool konghang=false;
	while(scanf("%d %c %c",&n,&a,&b)!=EOF)
	{
		if(konghang==false)	konghang=true; //如果是输出的第一组数据,则不输出空行,否则输出
		else printf("\n");

		int i,j,x,y;
		char buf[80][80]; 
		for(i=1,j=0;i<=(n/2+1);i++,j+=2)  //i表示从里到外的层数,j+1表示外框长度
		{
			x=n/2+1,y=x;
			x-=i-1,y=x;
			char c=(i%2==0)?b:a;  //确定该位置的字符类型
			buf[x][y]=c; //下面的循环不包含左上角的字符
			for(int k=1;k<=j;k++)
			{
				buf[x][y+k]=c;
				buf[x+k][y]=c;
				buf[x+j][y+k]=c;
				buf[x+k][y+j]=c;
			}
		}
		//将四个角写为空格,注意只有n不为1时才需要!!
		if(n!=1)
		{
			buf[1][1]=' ';
			buf[1][n]=' ';
			buf[n][1]=' ';
			buf[n][n]=' ';
		}
		//遍历整个数组,将其打印出来
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++)
			{
				printf("%c",buf[i][j]);
			}
			printf("\n");
		}
	}
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章