【PAT乙級】1027 列印沙漏
問題描述
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求列印出的沙漏能用掉儘可能多的符號。
輸入格式
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式
首先列印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
樣例輸入
19 *
樣例輸出
C++程式碼
#include<bits/stdc++.h>
using namespace std;
int sum(int i){
return 2*i*i - 1;
}
int findk(int n){
for(int i=1;i<50;i++){
if(sum(i)<=n&&sum(i+1)>n)
return i-1;
}
}
void outspace(int k){
for(int i=0;i<k;i++){
printf(" ");
}
}
void outc(int k,char c){
for(int i=0;i<k;i++){
printf("%c",c);
}
}
void upout(int k,char c){
int i=2*k+1,j=0;
while(k--){
outspace(j);
outc(i,c);
cout<<endl;
i-=2;
j+=1;
}
}
void midout(int k,char c){
outspace(k);
cout<<c<<endl;
}
void downout(int k,char c){
int i=3,j=k-1;
while(k--){
outspace(j);
outc(i,c);
cout<<endl;
i+=2;
j-=1;
}
}
int main(){
int n;
char c;
cin>>n>>c;
int k = findk(n);
upout(k,c);
outspace(k); cout<<c<<endl;
downout(k,c);
if(n-sum(k+1)!=0)
cout<<n-sum(k+1);
return 0;
}
備註
一個測試點錯誤……
我的程式碼好醜
Think Twice,Code Once !!!
相關文章
- PAT-B 1027 列印沙漏 【模擬】
- 1027 列印沙漏 (20分)
- PAT 乙級
- PAT乙級1023
- 【PAT乙級】1017 A除以B
- 【PAT乙級】1065 單身狗
- 【PAT乙級】1052 賣個萌
- 【PAT乙級】1048 數字加密加密
- 【PAT乙級】1066 影像過濾
- 【PAT乙級】1021 個位數統計
- PAT乙級——1093(字串匹配)Java實現字串匹配Java
- L1-002 列印沙漏
- PTA-7-82 列印沙漏
- PAT乙級 | 1086 就不告訴你 (15分)
- PAT乙級比賽-互評成績計算
- PAT 乙級 1094 谷歌的招聘 (20分)---【素數 字串】谷歌字串
- 【PAT乙級、C++】1024 科學計數法 (20分)C++
- PAT乙級——1092(陣列排序 自定義sort)Java實現陣列排序Java
- pat乙級自我回顧:一般錯誤出現原因
- PAT 2023 冬 乙 方格填數
- PAT乙級1004 成績排名 (20分)(C語言版)及解析C語言
- php 1027PHP
- 2022年冬pat乙級考試題目及程式碼解析附部分錯誤原因
- PAT乙級1026程式執行時間(秒數轉換為時間)(值得學習)
- PAT乙級1001 || 害死人不償命的(3n+1)猜想(C語言)C語言
- PAT - 7-20 列印九九口訣表
- PAT乙 1041 考試座位號 (15分)(C C++)C++
- PAT甲級1032 Sharing
- PAT甲級1030 Travel Plan
- 浙大PAT甲級考試
- PTA乙級 1004 成績排名
- PAT甲級1023 Have Fun with Number
- PAT-B 1002 寫出這個數 【字串+遞迴列印】字串遞迴
- 實現一個沙漏⏳元件元件
- PAT 甲級 1152 Google Recruitment (20分)GoUI
- 20年春季甲級pat考試
- PAT甲級-1015. Reversible Primes (20)
- PAT-B 1006 換個格式輸出整數【遞迴列印】遞迴