CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

打印一个 N*N 的方阵

楼主zhuang6781193()2006-06-04 10:18:30 在 C/C++ / C++ 语言 提问

打印一个   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  
  用循环打印,不要用swicsh;  
  问题点数:20、回复次数:4Top

1 楼sinkileu(小心)回复于 2006-06-04 11:47:33 得分 0

下面代码试验成功:  
   
  #include   <iostream>  
  #include   <iomanip>  
  using   namespace   std;  
   
  #define   N   15  
   
  char   c[N][N];  
   
  int   main()  
  {  
  for(int   i=0;   i<N;   i++)  
  for(int   j=0;   j<N;   j++)  
  {  
  int   temp;  
  if(i<=j   &&   i+j<=N-1)  
  temp   =   i;  
  else   if(i>j   &&   i+j>N-1)  
  temp   =   N-1   -   i;  
  else   if(i>j   &&   i+j<=N-1)  
  temp   =   j;  
  else  
  temp   =   N-1   -   j;  
   
  if(temp   ==   0)  
  c[i][j]   =   'T';  
  else   if(temp   ==   1)  
  c[i][j]   =   'j';  
  else  
  c[i][j]   =   '1'   +   temp   -   2;  
  }  
   
  for(int   i=0;   i<N;   i++)  
  {  
  for(int   j=0;   j<N;   j++)  
  {  
  cout   <<   setw(5)   <<   c[i][j];  
  }  
  cout   <<   endl;  
  }  
  }Top

2 楼sinkileu(小心)回复于 2006-06-04 11:50:01 得分 0

把setw(5)改为setw(2)打印出来会更漂亮一点.Top

3 楼SamuelKevin(曼陀罗)回复于 2006-06-09 04:02:50 得分 0

///////////楼上的,不必开数组。。。。。。  
  #include   <stdio.h>  
  void   input_T(int   n);  
  void   input_J(int   n);  
  void   input_mid(int   n);  
  int   main()  
  {  
  int   N;     //N>3  
  int   len;     //矩阵中间段的长  
  int   mid;  
  int   i,j;  
  scanf("%d",   &N);  
  input_T(N);  
  input_J(N);  
  input_mid(N-4);  
  input_J(N);  
  input_T(N);  
  return   0;  
  }  
   
  void   input_T(int   n)  
  {  
  int   i;  
  for   (i=1;   i<=n;   i++)  
  {  
  putchar('T');  
  }  
  putchar('\n');  
  }  
   
  void   input_J(int   n)  
  {  
  int   i;  
  putchar('T');  
  for   (i=2;   i<=n-1;   i++)  
  {  
  putchar('J');  
  }  
  putchar('T');  
  putchar('\n');  
  }  
   
  void   input_mid(int   n)  
  {  
  int   i,j,k;  
  int   flag   =   (n%2==1?1:0);  
  int   mid   =   (n/2)+flag;  
  for   (i=1;   i<=mid;   i++)       //前面的部分  
  {  
  putchar('T');  
  putchar('J');  
  for   (j=1;   j<=i;   j++)  
  {  
  printf("%d",   j);  
  }  
  for   (k=1;   k<=n-2*i;   k++)  
  {  
   
  printf("%d",   j-1);  
  }  
  j   =   (i==mid?i-flag:i);  
  while   (j>=1)  
  {  
  printf("%d",   j);  
  j--;  
  }  
  putchar('J');  
  putchar('T');  
  putchar('\n');  
  }  
  for   (i=mid-flag;   i>=1;   i--)  
  {  
  putchar('T');  
  putchar('J');  
  for   (j=1;   j<=i;   j++)  
  {  
  printf("%d",   j);  
  }  
  for   (k=1;   k<=n-2*i;   k++)  
  {  
  printf("%d",   j-1);  
  }  
  j   =   (i==mid?i-flag:i);  
  while   (j>=1)  
  {  
  printf("%d",   j);  
  j--;  
  }  
  putchar('J');  
  putchar('T');  
  putchar('\n');  
  }  
  }  
   
  Top

4 楼sinkileu(小心)回复于 2006-06-09 22:14:23 得分 0

嗯   ,   开数组只是为了看起来更明了.当然可以直接在for中打印.Top

相关问题

关键词

得分解答快速导航

  • 帖主:zhuang6781193

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo