打印沙漏

Posted yang13aazop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打印沙漏相关的知识,希望对你有一定的参考价值。

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

 

*****

 ***

  *

 ***

*****

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

 

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

 

1.代码#include<stdio.h>

 

int n;

char a;

int l; //记录最长的一行有多少个符号

int sum=1;

int rest;

int space;

int icon;

int s;

int i;

 

int main()

{

 scanf("%d %c",&n,&a);

 if(n<5){

  rest=n-1;

  printf("%c %d",a,rest);

  return 0;

 }

 for(l=3;sum<=n;l+=2){ //测试余数为0的情况,此处sum<=n而不是sum<n

  sum+=2*l;

 }

 l-=4;

 rest=n-sum+l*2+4; //剩余的符号数

 for(icon=l;icon>=1;icon-=2){

  space=(l-icon)/2;

  for(s=space;s>0;s--){

   printf(" ");

  }

  for(i=icon;i>0;i--){

   printf("%c",a);

  }

  printf(" ");

 }

 for(icon=3;icon<=l;icon+=2){

  space=(l-icon)/2;

  for(s=space;s>0;s--){

   printf(" ");

  }

  for(i=icon;i>0;i--){

   printf("%c",a);

  }

  printf(" ");

 }

 printf("%d",rest);

 

}

 

2运行截图

 

3.设计思路

 

以上是关于打印沙漏的主要内容,如果未能解决你的问题,请参考以下文章

打印沙漏

打印沙漏

打印沙漏

打印沙漏

打印沙漏

打印沙漏