1. 程式人生 > >PAT乙級 1027 列印沙漏

PAT乙級 1027 列印沙漏

測試點0、3通過,但1、2執行超時,不知道問題出在哪裡。以下是程式碼:

#include<stdio.h>
int main(){
	int N,useful=1,useless,first_row;//給定字元數、可用字元數、無用字元數、第一行字元數
	char ch;//給定的字元
	scanf("%d %c",&N,&ch);
	for(int i=2;useful<=N;++i){
		if(useful+2*(2*i-1)>N){
			break;
		} 
		useful+=2*(2*i-1);
		first_row=2*i-1;
	}                    //求得useful與first_row
	useless=N-useful;               //得到useless
	for(int i=first_row;i>=1;i-=2){
		if(i!=first_row){
			for(int j=(first_row-i)/2;j>0;--j){
				printf(" ");
			}
			for(int j=i;j>0;--j){
				printf("%c",ch);
			}
		}
		else{
			for(int j=i;j>0;--j){
				printf("%c",ch);
			}
		}
		printf("\n");
	}     //輸出上半沙漏
	for(int i=3;i<=first_row;i+=2){
		for(int j=(first_row-i)/2;j>0;--j){
			printf(" ");
		}
		for(int j=i;j>0;--j){
			printf("%c",ch);
		}
		printf("\n");
	}   //輸出下半沙漏
	printf("%d",useless);   //輸出剩下沒用掉的符號數
}

在這裡插入圖片描述