- C语言考题之一 用文本方式显示图形
- 发布日期时间:2007-1-14 来源:网络 点击数: 作者:佚名
题目:输入一个整数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语言语法和逻辑上两方面的颠峰
文章转载请注明来源于:汕头自考网
|
|



