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



#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
*************
 ***********
  *********
   *******
    *****
     ***
      *
     ***
    *****
   *******
  *********
 ***********
*************


猜你喜欢

转载自blog.csdn.net/zgl7903/article/details/61420123
今日推荐