pintia-L1-002


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;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章