本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個「*」,要求按下列格式列印
所謂「沙漏形狀」,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意n個符號,不一定能正好組成乙個沙漏。要求列印出的沙漏能用掉盡可能多的符號。
輸入格式:
輸入在一行給出1個正整數n(≤1000)和乙個符號,中間以空格分隔。
輸出格式:
首先列印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
輸出樣例:
//沙漏列印問題
#include
//遞迴計數,便於列印空格
int count = 0;
void printcharacter(int num, char ch);
void printspace(int num);
int main(void)
int total, n ,nsubtotal = 0;
char ch;
scanf("%d %c", &total, &ch);
//找到單行最大符號數的序號
for(n=1; subtotal<=total; n++)
subtotal=2*(n*n)-1;
//傳入單行最大符號數及符號
printcharacter(2*(n-2)-1, ch);
printf("%d\n", total-(2*(n-2)*(n-2)-1));
return 0;
void printcharacter(int num, char ch)
if(num>0)
printspace(count);
//列印字元
for(int i=0; iprintf("%c", ch);
//換行
printf("\n");
//呼叫遞迴次數加一
count++;
//遞迴呼叫
printcharacter(num-2, ch);
//列印字元
if(num!=1)
//呼叫遞迴次數減一
count–;
//列印空格
printspace(count);
for(int i=0; iprintf("%c", ch);
//換行
printf("\n");
else
count–;
return;
void printspace(int num)
for(int i=1; i<=num; i++)
printf(" ");
列印菱形 列印沙漏
輸入 輸出樣例輸入 5樣例輸出 提示 每行輸出最後乙個星號後面沒有空格 多組測試資料 include include 只需找出每一行和空格 之間的關係即可 intmain for z 1 z 2 i 1 z printf n for i n 1 i 1 i 行數後半段是前半段的顛倒 for z 2 ...
沙漏演算法列印
列印沙漏演算法計算題 include using namespace std int main else if number temp 2 a 2 while 1 經過確定之後的匹配最大的列印沙漏,列印的只是一部分的四分之一,並且將中間的位置在四分之一的計算過程,之後用a temp 1的方式反而將迴...
列印沙漏程式設計
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個 要求按下列格式列印 謂 沙漏形狀 是指每行輸出奇數個符號 各行符號中心對齊 相鄰兩行符號數差2 符號數先從大到小順序遞減到1,再從小到大順序遞增 首尾符號數相等。給定任意n個符號,不一定能正好組成乙個沙漏。要求列印出的沙漏能用掉盡可能多...