注册 登录
编程论坛 C++教室

[讨论]大家看看能不能精简一下

snipered 发布于 2007-10-10 17:25, 612 次点击
打印一个 N*N 的方阵,N为每边 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



#include<stdio.h>
#include<stdlib.h>
#define N 15
void main()
{
int i,j,c,k,l;
k=N-2;
l=3;
c=1;
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
if(i==N||j==N||i==1||j==1)
{
printf("T");
}
else if(i==(N-1) || j==(N-1) ||i==2||j==2)
{
printf("J");
}
else if(i==k||j==k||i==l||j==l)

{

printf("%d",1);
}
else if(i==(k-1)||j==(k-1)||i==(l+1)||j==(l+1))

{

printf("%d",2);
}
else if(i==(k-2)||j==(k-2)||i==(l+2)||j==(l+2))

{

printf("%d",3);
}
else if(i==(k-3)||j==(k-3)||i==(l+3)||j==(l+3))

{

printf("%d",4);
}
else if(i==(k-4)||j==(k-4)||i==(l+4)||j==(l+4))

{

printf("%d",5);
}
else
{
printf("%d",6);
}
}
printf("\n");
}

}





我的水平不够只能做到这里了!
呵呵
7 回复
#2
野比2007-10-10 19:32
https://bbs.bc-cn.net/viewthread.php?tid=147967
在1楼解答列表中找第3题,然后参考
#3
snipered2007-10-12 13:09
没找到啊!
#4
zkkpkk2007-10-12 18:52
我的很麻烦,但是因为我没看到(3<N<20)顾及了N能取很大的值
#5
野比2007-10-13 18:23
以下是引用snipered在2007-10-12 13:09:05的发言:
没找到啊!

81楼...还有其他N多

#6
hhei2007-10-15 16:19
试一下我这个程序:
#include <iostream>
using namespace std;
void main ()
{
int n;
cout << "enter the value of N: " << endl;
cin >> n;
for(int i=0;i < n;i++)
{
for(int j=0;j < n;j++)
{
if(i==0||j==0||i==n-1||j==n-1)
{
cout << 'T';
}
else if(i==1||j==1||i==n-2||j==n-2)
{
cout << 'J';
}
else
{
for(int t=1;t <= ((n-3) / 2);t++)
{
if(i==(t+1)||j==(t+1)||i==(n-2-t)||j==(n-t-2))
{
cout << t;
break;
}


}
}

}
cout << endl;
}
cout << endl;
}
#7
eagleboycn2007-10-15 16:26
LS强!
学习了
#8
snipered2007-10-18 17:37

我自己又精简了一下大家看看
#include<stdio.h>
void main()
{
int i,j,m,k,s,q;
int row;
m=-1;
printf("row:");
scanf("%d",&row);
for(i=1;i<=row;i++)
{
k=1;
s=row-2-2*m;
q=1;
for(j=1;j<=row;j++)
{
if(i==1 || j==1 || i==row || j==row)
printf("# ");
else if(i==2 || j==2 || i==row-1 || j==row-1)
printf("* ");
else
{
if(k==m)
{
printf("%d ",k);
q++;
if(q>s)
k++;
}
else
{
if(k<m)
printf("%d ",k);
else
printf("%d ",2*m-k);
k++;
}
}
}
if(i>row/2)
m--;
else
{
if(row%2==0 && i<row/2)
m++;
else if(row%2==1)
m++;
}
printf("\n");
}
}

1