1027?打印沙漏?(20 分)
本題要求你寫個程序把給定的符號打印成沙漏的形狀弓柱。例如給定17個“*”,要求按下列格式打印
*****
***
? *
***
*****
所謂“沙漏形狀”侧但,是指每行輸出奇數(shù)個符號矢空;各行符號中心對齊;相鄰兩行符號數(shù)差2禀横;符號數(shù)先從大到小順序遞減到1屁药,再從小到大順序遞增;首尾符號數(shù)相等柏锄。
給定任意N個符號酿箭,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉盡可能多的符號绢彤。
輸入格式:
輸入在一行給出1個正整數(shù)N(≤1000)和一個符號七问,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀茫舶,最后在一行中輸出剩下沒用掉的符號數(shù)械巡。
輸入樣例:
19 *
輸出樣例:
*****
***
? *
***
*****
2
#include <iostream>
#include<stdio.h>
#include<iomanip>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
? int a[50];
? int knum,cnum;
? for(int i=1;i<50;i++){
? ? a[i]=2*i*i-1;
? }
? int N,num;
? char op;
? scanf("%d %c",&N,&op);
? for(int i=1;i<50;i++){
? ? if(a[i]<=N&&a[i+1]>N){
? ? ? ? num=i;
? ? }
? }
? knum=0;
? cnum=2*num-1;
? while(cnum!=1){
? ? for(int i=0;i<knum;i++){
? ? ? ? printf(" ");
? ? }
? ? for(int i=0;i<cnum;i++){
? ? ? ? printf("%c",op);
? ? }
? ? printf("\n");
? ? cnum=cnum-2;
? ? knum++;
? }
? ? do{
? ? for(int i=0;i<knum;i++){
? ? ? ? printf(" ");
? ? }
? ? for(int i=0;i<cnum;i++){
? ? ? ? printf("%c",op);
? ? }
? ? cnum=cnum+2;
? ? knum--;
? ? printf("\n");
? }while(cnum!=(2*num+1));
? ? printf("%d",N-a[num]);
}
這段代碼一開始用了兩遍,每一行前面和后面的空格全部打印出來了饶氏,但輸出樣例中并不需要后面的空格讥耗。
? for(int i=0;i<knum;i++){
? ? ? ? printf(" ");
? ? }