******** * *** *****
输入样例:
19 *输出样例:
***** *** * *** ***** 2解:***** L3=3 n3=5*** L2=2 n2=3* L1=1 n1=1 *** *****上沙漏 n=2L-1 上沙漏总数N1=L^2 N(总符号数)=2*L^2-1#include <stdio.h> #include <math.h> int count(double n){ if (n==0||n==1) return 0; else return n-2*((int)sqrt((n+1)/2))*((int)sqrt((n+1)/2))+1;/*多余的符号数*/ } int main() { float n; char ch; scanf("%f %c",&n,&ch);/*输入符号数和符号*/ printf("%d\n",count(n));/*输出符号余数*/ int L=(int)sqrt((n-count(n)+1)/2),i,q,p;/*L上沙漏层数*/ for (i=L;i>=1;i--)/*上沙漏循环*/ { for(p=1;p<=L-i;p++)/*输出符号前的空格*/ printf(" "); for(q=2*i-1;q>=1;q--)/*输出符号*/ { printf("%c",ch); } printf("\n");/*换行*/ } for (i=2;i<=L;i++)/*下沙漏循环*/ { for(p=1;p<=L-i;p++)/*下沙漏空格*/ printf(" "); for(q=1;q<=2*i-1;q++)/*下沙漏符号*/ { printf("%c",ch); } printf("\n");/*换行*/ } return 0; }