关闭

等差数列应用——控制台输出沙漏

148人阅读 评论(0) 收藏 举报
分类:



#include<stdio.h>

int main()
{
  int i,j,k,l, a1, an, d, n, sn, iN, hN;

  while(1)
  {
    //输入N
    printf("\r\nPlease input N:");
    scanf("%d", &iN);

    //小于1退出
    if(iN < 1)
      break;

    //确定边界范围 
    hN = (iN+1) / 2;
    a1 = 1, d = 2;  
    an=a1, sn=a1, n=0;
    while( sn + an + d <= hN )
    {
      an+=d;
      sn+=an;
      n++;
    }
    printf("maxN = %d\r\n", sn*2-1);

    //输出前半部分
    for(i=0,j=an; i<=n; i++, j-=d)
    {
      l = (an-j)/2;
      for(k=0; k<l; k++)
        printf(" ");

      for(k=0; k<j; k++)
        printf("*");

      for(k=0; k<l; k++)
        printf(" ");

      printf("\r\n");
    }

    //输出后半部分
    for(i=0,j=a1+d; i<n; i++, j+=d)
    {
      l = (an-j)/2;
      for(k=0; k<l; k++)
        printf(" ");
    
      for(k=0; k<j; k++)
        printf("*");
    
      for(k=0; k<l; k++)
        printf(" ");
    
      printf("\r\n");
    }
  }

  return 0;
}

Please input N:100
maxN = 97
*************
 ***********
  *********
   *******
    *****
     ***
      *
     ***
    *****
   *******
  *********
 ***********
*************


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:292897次
    • 积分:5128
    • 等级:
    • 排名:第5686名
    • 原创:183篇
    • 转载:0篇
    • 译文:2篇
    • 评论:114条
    最新评论