🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### 题目描述 打印沙漏: 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。 给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。 输入格式:输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。 输出格式:首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。 输入样例: 19 \* 输出样例: ``` ***** *** * *** ***** ``` 2 ### 分析(伪代码和知识点) ### 代码 ``` #include<stdio.h> #include <math.h> int main() { int n,i,j,t,re,a=-1,temp=-1; char c; //输入一个数字,和一个字符,n为基数,c为要输出的符号, scanf("%d %c",&n,&c); //循环的算出剩余字符的数量, //a为要每行要输出的字符数量, //temp为从中间开始往后每一行输出的数量和 while(temp<=n) { re = n-temp; a+=2; temp+=2*a; // printf("%d %d %d %d\n",n,temp,a,re); } a-=2; //输出的最长数 也是总行数 t=(a-1)/2; //对称数 // printf("\n %d %d \n",a,t); for(i=0;i<a;i++) { for(j=0;j<t-abs(i-t);j++) printf(" "); for(j=0;j<abs(i-t)*2+1;j++) printf("%c",c); printf("\n"); } printf("%d---\n",re); system("pause"); return 0; } ```