如下50道算法編程題訪問量較大,包含經常使用語法,數據結構,解題思路等等,做爲C語言學習者必練題目推薦給各位。創做不易,記得一鍵三連哦!!!程序員
本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個「*」,要求按下列格式打印算法
*****
***
*
***
*****編程
所謂「沙漏形狀」,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。數組
給定任意N個符號,不必定能正好組成一個沙漏。要求打印出的沙漏能用掉儘量多的符號。數據結構
輸入格式:函數
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。學習
輸出格式:.net
首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。設計
輸入樣例:code
19 *
輸出樣例:
*****
***
*
***
*****
2
代碼:
#include<stdio.h> int main() { int N,n; char str; scanf("%d %c",&N,&str); int i; int l=0,sum=0; int result=0; for(i=3;;i+=2) { sum+=i; if(sum*2+1>N)break; l++; } //printf("l==%d\n",l); int temp,j; int L=l*2+1; // printf("%d\n",L); for(i=L;i>=3;i-=2) { temp=(L-i)/2; if(temp>0)for(j=1;j<=temp;j++) { printf(" "); } for(j=1;j<=i;j++) { printf("%c",str); result++; } printf("\n"); } temp=(L-i)/2; if(temp>0)for(j=1;j<=temp;j++) { printf(" "); } printf("%c\n",str); for(i=3;i<=L;i+=2) { temp=(L-i)/2; if(temp>0)for(j=1;j<=temp;j++) { printf(" "); } for(j=1;j<=i;j++) { printf("%c",str); } printf("\n"); } printf("%d\n",N-(result*2+1)); return 0; }