1027. 列印沙漏(20)(C++)
阿新 • • 發佈:2019-02-09
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印
***** *** * *** *****
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉儘可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(<=1000)和一個符號,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:19 *輸出樣例:
***** *** * *** ***** 2
#include<iostream> using namespace std; int main(){ int n,rest=0; char c; cin>>n>>c; int a[100]; for(int i=0;i<100;i++){ a[i]=2*i*i-1; if(a[i]>n){ rest=n-a[i-1]; i=i-1; break; } if(a[i]==n){ break; } } for(int j=i;j>0;j--){ for(int k=j;k<i;k++) printf(" "); for(int q=1;q<=2*j-1;q++) printf("%c",c); cout<<endl; } for(int j=2;j<=i;j++){ for(int k=1;k<=i-j;k++) printf(" "); for(int q=1;q<=2*j-1;q++) printf("%c",c); cout<<endl; } cout<<rest; }