您的位置:自考365 > 复习指导 > 历年试题 > C语言考题之一 用文本方式显示图形

C语言考题之一 用文本方式显示图形

2006-06-12 14:44  北京自考热线 【 】【我要纠错

题目:输入一个整数N(N<10),如果N=3,则输出
  1
 222
33333
 222
  1
依次类推。

分析:
一共输出2*N-1行
设行数为m,则第m行输出m-1个空格,2*m-1个数字
当m<=N 时,该行输出的数字为m
设n=N,则当m>N 时,该行输出的数字为--n

解法一:
最基础的算法,目的是做出来就行
程序体较难看
main()

  int i=1,j=0,k=0,n=0,m=0;
  scanf("%d",&n);
 while(k<2*n-1)
  {
   if(i<=n)  
    { 
      for(j=0;j<n-i;j++) printf(" ");
      for(j=0;j<2*i-1;j++) printf("%d",i);
      printf("\n");
      i++;k++;
    }
  else 
            {     
                for(j=0;j<i-n;j++) printf(" ");
  for(j=0;j<(4*n-2*i-1);j++) printf("%d",2*n-i);
  printf("\n");
  i++;k++;
      }
    }
}

往下程序体就比较好看了
解法二:
对上一个算法求精,这样做评卷人的打分会高一些
main()
{
 int n,i,s=1,k;
 scanf("%d",&n);
 k=2*n-1;
  while(k!=0)
   {
    for(i=0;i<n-1;i++) printf(" ");
    for(i=0;i<2*s-1;i++) printf("%d",s);
    printf("\n");
    if(s<k){--n;++s;--k;}
      else {++n;--s;--k;}
   }
}

解法三:
在将上一算法函数化,并带一点递归算法的味道,接近北大的最高要求
int abc(int n,int s,int k)
{
 int i;
 if(k==0) return;
 for(i=0;i<n-1;i++) printf(" ");
 for(i=0;i<2*s-1;i++) printf("%d",s);
 printf("\n");
 s<k?abc(--n,++s,--k):abc(++n,--s,--k);
}
main()
{
 int n;
 scanf("%d",&n);
 abc(n,1,2*n-1);
}

算法四:
将上一算法完全递归化,达到C语言语法和逻辑上两方面的颠峰

本文转载链接:C语言考题之一 用文本方式显示图形

分享到:
  • 站内搜索
  • 课程搜索
  • 试题搜索

热门搜索:教材 报名 查分 免考 考试计划