两个简单的输出形状

 记得刚学C语言时,课本后面常常有这样的题目:在屏幕上打印9X9乘法表.当然现在看起来是很简单的小把戏.我在这里找一个更有难度的题.其实这就是我面试过程中遇到过的.

在屏幕上打印数字,例如:

0  1  2  3

12 13 14 4

11 16 15 5

10 9 8 7 6

 

0  0  0  0

0  1  1  0

0  1  1  0

0  0  0  0

 

答案如下:

  1. #include <iostream>
  2. #include <iomanip>
  3. #define ROUND
  4. using namespace std;
  5. void Display(int * Data , int size)
  6. {
  7.     int i,j;
  8.     for(i=0 ; i<size ; i++)
  9.     {
  10.         for(j=0 ; j<size ; j++)
  11.         {
  12.             cout.width(3);
  13.             cout << setiosflags( ios::left ) << Data[i*size+j] <<" ";
  14.         }
  15.         cout<<endl;
  16.     }
  17. }
  18. void SetData(int * Data , int size)
  19. {
  20.     int count = 0;
  21.     int i;
  22.     int loopCount;
  23.     for(loopCount=0 ; loopCount<size/2 ; loopCount++)
  24.     {
  25.         for(i=loopCount ; i<size-loopCount ; i++)
  26.         {
  27. #ifdef ROUND
  28.             Data[loopCount*size+i] = count;
  29. #else
  30.             Data[loopCount*size+i] = count++;
  31. #endif
  32.         }
  33.         for(i=1+loopCount ; i<size-loopCount ; i++)
  34.         {
  35. #ifdef ROUND
  36.             Data[i*size + size-loopCount-1] = count;
  37. #else
  38.             Data[i*size + size-loopCount-1] = count++;
  39. #endif
  40.         }
  41.         for(i=size-loopCount-2 ; i>=loopCount ; i--)
  42.         {
  43. #ifdef ROUND
  44.             Data[(size-loopCount-1)*size+i] = count;
  45. #else
  46.             Data[(size-loopCount-1)*size+i] = count++;
  47. #endif
  48.         }
  49.         for(i=size-loopCount-2 ; i>loopCount ; i--)
  50.         {
  51. #ifdef ROUND
  52.             Data[i*size+loopCount] = count;
  53. #else
  54.             Data[i*size+loopCount] = count++;
  55. #endif
  56.         }
  57. #ifdef ROUND
  58.         count++;
  59. #endif
  60.     }
  61.     if(size%2 != 0)
  62.     {
  63.         Data[size/2*size + size/2] = count;
  64.     }
  65. }
  66. void main()
  67. {
  68.     int *pArray;
  69.     int size;
  70.     while(1)
  71.     {
  72.         cout<<"请输入数组的维数(输入0退出):";
  73.         cin>>size;
  74.         cout<<endl;
  75.         if(size<0)
  76.         {
  77.             cout<<"您的输入错误!/n";
  78.         }
  79.         else if(size==0)
  80.         {
  81.             cout<<"886!"<<endl;
  82.             return;
  83.         }
  84.         pArray = new int[size*size];
  85.         if(pArray==0)
  86.         {
  87.             cout<<"内存不足!"<<endl;
  88.             return;
  89.         }
  90.         SetData(pArray , size);
  91.         Display(pArray , size);
  92.         delete [] pArray;
  93.     }
  94. }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值