1027 打印沙漏 (20分)——27行代码AC(结构清晰)
生活随笔
收集整理的這篇文章主要介紹了
1027 打印沙漏 (20分)——27行代码AC(结构清晰)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
立志用更少的代碼做更高效的表達(dá)
PAT乙級(jí)最優(yōu)題解——>傳送門
本題要求你寫個(gè)程序把給定的符號(hào)打印成沙漏的形狀。例如給定17個(gè)“*”,要求按下列格式打印
輸入格式:
輸入在一行給出1個(gè)正整數(shù)N(≤1000)和一個(gè)符號(hào),中間以空格分隔。
輸出格式:
首先打印出由給定符號(hào)組成的最大的沙漏形狀,最后在一行中輸出剩下沒(méi)用掉的符號(hào)數(shù)。
輸入樣例:
19 *
輸出樣例:
解題思路:
1、將圖形分成三部分, 上部分, 中間一行, 下部分。
2、利用循環(huán)求出星號(hào)最多的一行星號(hào)個(gè)數(shù), 然后-2循環(huán), 分別遍歷上下兩部分, 補(bǔ)充中間部分即可。
注意:
1、每行*后面是沒(méi)有空格的, 如第三行是:空格空格*,而不是:空格空格*空格空格
2、由于上下兩部分代碼是對(duì)稱的, 因此可以采用函數(shù)復(fù)用的方式, 用一段代碼來(lái)表示。 通過(guò)傳遞參數(shù)的不同來(lái)實(shí)現(xiàn)不同部分。 具體見(jiàn)代碼。
代碼展示
#include<bits/stdc++.h> using namespace std;char c; int n, num = 1, num1; void Operation(bool flag) { //輸出上下部分, 通過(guò)flag控制num1 = num;for(int i = 3; i <= num; i+=2) {int len = (num-num1)/2;for(int j = 0; j < len; j++) cout << ' ';for(int j = 0; j < num1; j++) cout << c;flag?num1-=2:num1+=2;cout << '\n';} }int main() {cin>>n>>c; n-=1;for(int i = 3; ; i+=2) { //計(jì)算出num(最多*的一行有多少*) if(n - i*2 < 0) { num = i-2; break; }n -= i*2; //n是剩余的個(gè)數(shù) }Operation(true);//上半部分 for(int i = 0; i < (num-num1)/2; i++) cout << ' '; //輸出中間一行 cout << c << '\n';num1+=2;Operation(false);//下半部分 cout << n; return 0; }每日一句
你不勇敢,沒(méi)人替你勇敢。
總結(jié)
以上是生活随笔為你收集整理的1027 打印沙漏 (20分)——27行代码AC(结构清晰)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1026 程序运行时间 (15分)(附四
- 下一篇: 1.使用适配器模式设计一个仿生机器人:要