排版類問題(輸出各種圖形)

類型一:對於輸出有規律的

例 九度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;
}

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