1. 程式人生 > 其它 >PAT (Basic Level) Practice (中文) 1027 列印沙漏

PAT (Basic Level) Practice (中文) 1027 列印沙漏

技術標籤:PATc語言

1027 列印沙漏

本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印

*****
 ***
  *
 ***
*****

所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。

給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉儘可能多的符號。

輸入格式:

輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。

輸出格式:

首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。

輸入樣例:

19 *

輸出樣例:

*****
 ***
  *
 ***
*****
2

程式碼

#include<cstdio>

int main(){
	int n,m=1,k,count,t;
	char a; 
	scanf("%d %c",&n,&a);
	for(int i=1;i<1000;i++){
		k=m;
		m+=2*(2*i+1);
		count=i;	//count為倒三角層數 
		if(m>=n) break;
	}
	if(m==n){
		t=m;
		count++;
	}
	else
	t=
k; //t為用掉符號數 int side=1+2*(count-1); //最頂端符號數 for(int i=0;i<count;i++){ //倒三角 for(int j=0;j<i;j++){ printf(" "); } for(int j=0;j<side-2*i;j++){ printf("%c",a); } printf("\n"); } for(int i=0;i<count-1;i++){ //上三角 for(int j=0;j<count-i-2;
j++){ printf(" "); } for(int j=0;j<2*i+3;j++){ printf("%c",a); } printf("\n"); } printf("%d",n-t); }