您的位置:首页 > 编程语言 > C语言/C++

C++入门必做题 答案 03

2010-04-17 13:12 218 查看
小提示:部分题目的图形有偏移现象;解决办法为,将题目拷贝到记事本,字体设置为‘Fixedsys’。

(编译环境:windowsXP_sp3 + Visual_C++_2008,保证编译成功,正常运行。)

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>
using namespace::std;

void main()
{
int N; //声明数组的维数
char **a; //声明一个二维数组指针
while(1)
{
cout<<"请输入每边的个数(N)"<<endl;
cin>>N;
cin.clear();
cin.sync();

if(N<=3)
{
cout<<"输入无效,请重新输入"<<"/n";
}
else
{
break;
}

}

/*
用户输入N值后,我们要动态生成数组a

*/
a = new char *
;
for(int i=0;i<N;i++)
a[i] = new char
;

int T = N-1, J = N-2; //定义最外层与第二层的维数T和J

char x = 'T';
char y = 'J';

/*
打印最外面一圈的‘T’
*/
for(int i=0;i<=T;i++)
{
a[i][0]=x;
a[i][T]=x;
}
for(int j=0;j<=T;j++)
{
a[0][j]=x;
a[T][j]=x;
}

/*
打印外数第二圈的‘J’
*/
for(int i=1;i<=J;i++)
{
a[i][1]=y;
a[i][J]=y;
}
for(int j=1;j<=J;j++)
{
a[1][j]=y;
a[J][j]=y;
}

char k='0';
int p=1, q=J;

while(p<=q)
{
p++;q--;k++;
for(int i=p;i<=q;i++)
{
a[i][p]=k;
a[i][q]=k;
}
for(int j=p;j<=q;j++)
{
a[p][j]=k;
a[q][j]=k;
}

}

/*
打印计算结果
*/
for(int i=0;i<N;i++)
{
cout<<endl;
for(int j=0;j<N;j++)
cout<<a[i][j];
}
cout<<endl<<endl;
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: