title: pintia-L1-002
categories:
- ACM
- 水題
tags: - 沙漏
- 等差數列
date: 2020-02-17 08:27:46
公式求n,兩個循環打印
題目
L1-002 打印沙漏 (20分)
本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印
*****
***
*
***
*****
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉儘可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
輸出樣例:
*****
***
*
***
*****
2
代碼
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
int n;
char ch;
cin>>n>>ch;
int nn=(int)sqrt((n+1)/2);
for(int i=nn;i>=1;i--)
{
int k=nn-i;
while(k--) cout<<" ";
k=2*i-1;
while(k--)
cout<<ch;
cout<<endl;
}
for(int i=2;i<=nn;i++)
{
int k=nn-i;
while(k--) cout<<" ";
k=2*i-1;
while(k--)
cout<<ch;
cout<<endl;
}
int c=n-2*nn*nn+1;
//if(c)
cout<<c;
}