先列出完整程序
#include<stdio.h> int main(){ int N,num=1,i=1,j=1,sum; char n; scanf("%d %c",&N,&n); while(i<=N){ j+=2; i+=j*2; num+=2; } i-=j*2; //计算组成沙漏的最大个数 num-=2; //计算沙漏行数 sum=N-i;//计算剩余数 //上半部分 for(j=0;j<num/2+1;j++){ for(i=0;i<j;i++){ printf(" "); } for(i=0;i<num-j*2;i++){ printf("%c",n); } printf("\n"); } //下半部分 for(j=1;j<=num/2;j++){ for(i=1;i<=num/2-j;i++){ printf(" "); } for(i=1;i<=j*2+1;i++){ printf("%c",n); } printf("\n"); } printf("%d\n",sum);//输出剩余数 return 0; }结果展示:
1.先计算组成沙漏所需的最大个数,行数,以及剩余的符号数
scanf("%d %c",&N,&n); while(i<=N){ j+=2; i+=j*2; num+=2; } i-=j*2; //计算组成沙漏的最大个数 num-=2; //计算沙漏行数 sum=N-i;//计算剩余数2.将沙漏分为上下两部分,上部分为倒三角,下部分为基层部分
//上半部分 for(j=0;j<num/2+1;j++){ for(i=0;i<j;i++){ printf(" "); } for(i=0;i<num-j*2;i++){ printf("%c",n); } printf("\n"); }倒三角部分:
//下半部分 for(j=1;j<=num/2;j++){ for(i=1;i<=num/2-j;i++){ printf(" "); } for(i=1;i<=j*2+1;i++){ printf("%c",n); } printf("\n"); }基层部分: