当前位置: 代码迷 >> C语言 >> 编程打印图形
  详细解决方案

编程打印图形

热度:144   发布时间:2006-11-18 11:20:25.0
编程打印图形

N=15 打印出下面图形
字符的个数(3<N<20), 要求最 TTTTTTTTTTTTTTT
外一层为"T", 第二层为"J", 从第三层 TJJJJJJJJJJJJJT
起每层依次打印数字 1,2,3,... TJ11111111111JT
(右图以N为15为例) TJ12222222221JT
TJ12333333321JT
TJ12344444321JT
TJ12345554321JT
TJ12345654321JT
TJ12345554321JT
TJ12344444321JT
TJ12333333321JT
TJ12222222221JT
TJ11111111111JT
TJJJJJJJJJJJJJT
TTTTTTTTTTTTTTT
下面是我编出来N=15的例子,但是我觉得我编的很麻烦,恳请达人帮我简化一下,最好能用上循环,这样能更好的模块化,谢谢阿。
#include<stdio.h>
void main()
{
int i,j,k=2;

for(i=0;i<15;i++,putchar('\n'))
{
for(j=0;j<15;j++)
{
if(i*j==0||j==14||i==14)
printf("T");

else if(i*j==j||i*j==i||j==13||i==13)
printf("J");
else if(i==k||j==k||j==15-k-1||i==15-k-1)

printf("%d",k-1);

else if(i==k+1||j==k+1||j==15-k-1-1||i==15-k-1-1)

printf("%d",k+1-1);

else if(i==k+2||j==k+2||j==15-k-2-1||i==15-k-2-1)

printf("%d",k+2-1);
else if(i==k+3||j==k+3||j==15-k-3-1||i==15-k-3-1)

printf("%d",k+3-1);
else if(i==k+4||j==k+4||j==15-k-4-1||i==15-k-4-1)

printf("%d",k+4-1);


else printf("%d",k+5-1);


}

}

}

[此贴子已经被作者于2006-11-18 11:22:00编辑过]

搜索更多相关的解决方案: 图形  打印  数字  字符  

----------------解决方案--------------------------------------------------------
有一种用绝对值的..

你可以把这东西当作一个2D的图,他回有坐标.分别为X,Y值.当这2个值相加时,得出一个值,这个值用来控制输出一种不一样的图形.再想想!
----------------解决方案--------------------------------------------------------

晕.貌似会打成菱形,我记得以前看过的.再想想哦!


----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <math.h>
main()
{
int i,j;
for(i=-3;i<=3;i++)
{
for(j=-3;j<=3;j++)
{
if(abs(i)==3||abs(j)==3)
printf("J");
else if(abs(i)==2||abs(j)==2)
printf("T");
else if(abs(i)==1||abs(j)==1)
printf("1");
else if(abs(i)==0&&abs(j)==0)
printf("2");
}
printf("\n");
}
}

不知道这样的能不能接受哦...这个不是太好.我算不出来.这个比较容易实现.只显示了一半.

汗,貌似没啥改进哦。。。我想不太出来了!SORRY

[此贴子已经被作者于2006-11-18 13:18:49编辑过]


----------------解决方案--------------------------------------------------------

写出来了.大家看看吧.

#include<stdio.h>
#define N 15
char a[8]={'T','J','1','2','3','4','5','6'};
int main()
{
int i,j;
char b[N+1][N+1];
for(i=1;i<=N/2+1;i++)
{
for(j=i;j<=N-i+1;j++)
{
b[i][j]=a[i-1];
b[N-i+1][j]=a[i-1];
b[j][i]=a[i-1];
b[j][N-i+1]=a[i-1];
}
}

for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
printf("%c",b[i][j]);
}
printf("\n");
}
return(0);
}


----------------解决方案--------------------------------------------------------
还是斑竹厉害。我都没想到。还转牛角了。多多学习。T。T
----------------解决方案--------------------------------------------------------
我也是一时发热,突然想到可以这样做.不知道里面有没有问题.大家帮忙看看吧.谢了...

----------------解决方案--------------------------------------------------------
用循环会很麻烦的~~~~
----------------解决方案--------------------------------------------------------
不是很麻烦啦.摆脱好好看看,已经有不错的程序出现了!
----------------解决方案--------------------------------------------------------
以下是引用♀乖宝宝在2006-11-18 15:00:44的发言:
用循环会很麻烦的
用二唯表把它先存起来,直接打印输出.?我是想不出不用循环应该怎么做
----------------解决方案--------------------------------------------------------
  相关解决方案