学历改变命运
24小时客服:4008135555/010-82335555
当前位置:首页> 历年试题 > C语言试题之一 用文本方式显示图形

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

2006年06月12日    来源: 北京自考热线   字体:   打印
查分预约

题目:输入一个整数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语言语法和逻辑上两方面的颠峰

关注添加

扫码添加学习顾问

了解考试计划,进行学习规划
备战考试,获取试题及资料

扫码下载APP

海量历年试题、备考资料
免费下载领取

扫码进入微信小程序

每日练题巩固、考前模拟实战
免费体验自考365海量试题

免费题库

新人有礼
关闭