演算法學習之路|列印沙漏
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印
*****
***
*
***
*****
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求列印出的沙漏能用掉儘可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(<=1000)和一個符號,中間以空格分隔。
輸出格式:
首先列印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
輸出樣例:
*****
***
*
***
*****
2
解題思路:
先求出多餘幾個以及可以成的行數
在把影像分為上三角形,和下梯形即可。
#include<iostream>
using namespace std;
int line,yushu;
void a(int n){//知道符號的數量,求可以成的行數(不是真正的行數邏輯上的行數)和剩餘的數
int sum=1;
if(n==1){
line=1;
yushu=0;
}
for(int i=2;;i++){//從第二行開始
sum+=4*i-2;
if(sum>n){
line=i-1;
yushu=n-(sum-(4*i-2));
return;
}
}
}
int main(){
int n;
char ch;
cin>>n>>ch;
a(n);
for(int i=line;i>0;i--){
for(int j=i;j<line;j++){
cout<<" ";
}
for(int j=0;j<2*i-1;j++){
cout<<ch;
}
cout<<endl;
}
for(int i=2;i<=line;i++){
for(int j=i;j<line;j++){
cout<<" ";
}
for(int j=0;j<2*i-1;j++){
cout<<ch;
}
cout<<endl;
}
cout<<yushu;
}
相關文章
- 演算法學習之路|列印排名演算法
- L1-002 列印沙漏
- 演算法學習之路|划拳演算法
- 演算法學習之路|A除以B演算法
- 演算法學習之路|方格分割演算法
- 演算法學習之路|朋友數演算法
- 演算法學習之路|SpellItRight演算法
- 演算法學習之路|歐幾里得遊戲演算法遊戲
- 演算法學習之路|月餅演算法
- 演算法學習之路|PATRanking演算法
- 演算法學習之路|快速排序演算法排序
- 演算法學習之路|結繩演算法
- 演算法學習之路|數零壹演算法
- 演算法學習之路|開學寄語演算法
- 演算法學習之路|說反話演算法
- 演算法學習之路|幼兒園買玩具演算法
- 演算法學習之路|小賭怡情演算法
- 演算法學習之路|影像過濾演算法
- 演算法學習之路|日期問題演算法
- 演算法學習之路|賣個萌演算法
- 演算法學習之路|螺旋矩陣演算法矩陣
- 演算法學習之路|選擇題演算法
- 演算法學習之路|字元統計演算法字元
- 演算法學習之路|科學計數法演算法
- 演算法學習之路|PlayOnWords(尤拉道路+dfs)演算法
- 演算法學習之路|舊鍵盤打字演算法
- 演算法學習之路|最簡分數演算法
- 演算法學習之路|檢驗身份證演算法
- 演算法學習之路|愛丁頓數演算法
- 演算法學習之路|最小生成樹——prime演算法演算法
- 強化學習之路一 QLearning 演算法強化學習演算法
- 演算法學習之路|個位數統計演算法
- 演算法學習之路|狀態壓縮dp演算法
- 演算法學習之路|棋盤問題(博弈)演算法
- 演算法學習之路|進位制轉換演算法
- 演算法學習之路|宇宙無敵加法器演算法
- 演算法學習之路|四平方和演算法
- 演算法學習之路|寫出這個數(20)演算法