C++入门必做题 答案 03

小提示:部分题目的图形有偏移现象;解决办法为,将题目拷贝到记事本,字体设置为‘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[N][N]
 */
 a = new char *[N];
 for(int i=0;i<N;i++)
  a[i] = new char [N];

 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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值