首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大家来看看有没有更好的算法?该怎么解决

2012-02-10 
大家来看看有没有更好的算法?/**070426-22:00*问题描述3.打印一个N*N的方阵,N为每边N=15打印出下面图形字

大家来看看有没有更好的算法?
/*
  *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;
}

[解决办法]
这就差不多了
[解决办法]
#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的代码修改了一下

热点排行