大家来看看有没有更好的算法?

v风雪山神庙v 2007-04-29 10:03:53
/*
* 070426-22:00
* 问题描述

3. 打印一个 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 <iostream.h>

const int N=15;

int main()
{
char str[N][N],c; //str为方阵数组,c存放当前填充字符
int cir_num,n; //cir_num为圈数,n为圈数计数器
int i,j;
if(N%2) cir_num=N/2+1;
else cir_num=N/2;
n=1; //初始化计数器
while(n<=cir_num)
{
if(n==1) c='T';
else if(n==2) c='J';
else if(n==3) c='1';
for(i=0;i<N;i++) //也可用for(i=n-1;i<=N-n;i++)
for(j=0;j<N;j++) //也可用for(j=n-1;j<=N-n;j++)
{
if((i==n-1||i==N-n)&&(j>=n-1&&j<=N-n)) //对当前圈的两行赋值
str[i][j]=c;
if((j==n-1||j==N-n)&&(i>=n-1&&i<=N-n)) //对当前圈的两列赋值
str[i][j]=c;
}
n++;c++;
}
//输出方阵
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
cout<<str[i][j]<<' ';
cout<<endl;
}
return 1;
}
...全文
224 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
petertangpei 2007-04-30
  • 打赏
  • 举报
回复
看看
lidongri 2007-04-30
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

#define N 11
#define M (N * 2 -1)

int main()
{
char str[M][M], c;
int n;
int i,j;
n=1;
while(n<=N)
{
if(n==1)
{
c='T';
}
else if(n==2)
{
c='J';
}
else if (n==3)
{
c='1';
}
for(j=n-1; j<=N-n;j++) //合并一起传值既可
{
str[n-1][j]=c;
str[N-n][j]=c;
str[j][n-1]=c;
str[j][N-n]=c;
}
n++;
c++;
}

for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
cout<<str[i][j]<<' ';
}
cout<<endl;
}
return 1;
}
根据LZ的代码修改了一下
jixingzhong 2007-04-30
  • 打赏
  • 举报
回复
这就差不多了
systemthink 2007-04-30
  • 打赏
  • 举报
回复
关注...
v风雪山神庙v 2007-04-29
  • 打赏
  • 举报
回复
这是另一种

/*
* 070427-10:08
* 问题描述

3. 打印一个 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 <iostream.h>

const int N=15;

int main()
{
char str[N][N],c; //str为方阵数组,c存放当前填充字符
int cir_num,n; //cir_num为圈数,n为圈数计数器
int i,j;
if(N%2) cir_num=N/2+1;
else cir_num=N/2;
n=1; //初始化计数器
while(n<=cir_num)
{
if(n==1) c='T';
else if(n==2) c='J';
else if(n==3) c='1';
for(j=n-1;j<=N-n;j++) //对当前圈的上下两行赋值
{
str[n-1][j]=c;
str[N-n][j]=c;
}
for(i=n-1;i<=N-n;i++) //对当前圈的左右两列赋值
{
str[i][n-1]=c;
str[i][N-n]=c;
}
n++;c++;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
cout<<str[i][j]<<' ';
cout<<endl;
}
return 1;
}

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧