团体程序设计天梯赛-练习集 L1-002 打印沙漏
本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印
************ *****所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉盡可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最后在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *結尾無空行
輸出樣例:
************ ***** 2結尾無空行
答案:
#include<stdio.h>
void space (int n);
void symbol(int n,char a) ;
?
int main (){
?? ?int N, row=1,sum=0,cnt;
?? ?char a;
?? ?scanf("%d %c",&N,&a);
?? ?
?? ?while (1){
?? ??? ?if(row==1){
?? ??? ??? ?sum+=1;
?? ??? ?} else if(row>=2){
?? ??? ??? ?sum+= 2*(2*row-1);
?? ??? ?}
?? ??? ?if(sum>N) {
?? ??? ??? ?break;
?? ??? ?}?
?? ??? ?// printf("row=%d sum=%d\n",row,sum);
?? ??? ?row++ ?;
?? ??? ?
?? ?}
?? ?sum-=(2*row-1)*2;
?? ?row--;
?? ?
?? ?//printf("sum=%d\n",sum) ;
?? ?
?? ?for ( cnt=row;cnt>0;cnt--) {
?? ??? ?space(row-cnt);
?? ??? ?symbol(cnt,a);
?? ??? ?if(cnt!=1){
?? ??? ??? ?printf("\n") ;
?? ??? ?}?
?? ?} ??
?? ?printf("\n");
?? ?
?? ?for(cnt=2;cnt<=row;cnt++){
?? ??? ?space(row-cnt) ;
?? ??? ?symbol(cnt,a);
?? ??? ?if(cnt<row){
?? ??? ??? ?printf("\n");
?? ??? ?}
? ? ? ? if(cnt==row){
printf("\n"); ? ? ? ?}
?? ?} ?
?? ?
?? ??
?? ?printf("%d",N-sum) ;?
?? ?
?? ?return 0;
}
void space (int n) {
?? ?int i;
?? ?for(i=0;i<n;i++){
?? ??? ?printf(" ");
?? ?}
}
void symbol(int n,char a){
?? ?int i;
?? ?for(i=0;i<2*n-1;i++){
?? ??? ?printf("%c",a);
?? ?}
}
總結
以上是生活随笔為你收集整理的团体程序设计天梯赛-练习集 L1-002 打印沙漏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何跳过无用的字符信息
- 下一篇: L1-005 考试座位号