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

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;
}
...全文
219 5 打赏 收藏 转发到动态 举报
写回复
用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;
}
为什么人人都要学算法? 程序员对算法通常怀有复杂情感,算法很重要是共识,但是否每个程序员都必须学算法是主要的分歧点。很多人觉得像人工智能、数据搜索与挖掘这样高薪的工作才用得上算法,觉得算法深不可测。但是这些其实都不是具体的算法,而是一系列算法的集合。 所以说,好的代码从来离不开优秀的算法算法不学不可! 本门课程为系列课程第一课,挑选出非常实用、高效、高频的算法:动态规划! 动态规划(Dynamic programming,简称DP)很多人都觉得是比较难以理解和掌握的一种算法,为了应付面试更多的时候程序员会选择直接死记硬背斐波那楔数列或者背包问题的源码,其实只要认真学习、彻底理解,动态规划并没有那么难。 学完即可掌握面试中90% 以上会问到的算法问题 ,实用性99.9999%! 这门课程,授课老师很厉害! 王硕-资深软件工程师,从事计算机相关课程教学多年,擅长Java、Python、数据结构和算法等课程,有丰富的计算机课程的教学经验。致力于企业级软件开发和计算机教育工作,具有索尼中国研究院和四大国有银行软件开发中心的工作经历。 著有编程畅销书《你也能看得懂的Python算法书》。 本课程实用性极强,边学边练!零基础也能轻松入门~ 在这门课中,我们保证你能收获到这些 1)透彻理解:到底什么是动态规划 2)细致讲解:挖矿工问题 3)细致讲解:爬台阶问题 4)细致讲解:背包问题 【注意】 1)现在购买至少享受40元优惠;2)课程教辅材料自助下载; ---------------------------------------------------------------

64,642

社区成员

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

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