1. 程式人生 > >1027. 列印沙漏(20)(C++)

1027. 列印沙漏(20)(C++)

本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定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;
}