记得刚学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
答案如下:
- #include <iostream>
- #include <iomanip>
- #define ROUND
- using namespace std;
- void Display(int * Data , int size)
- {
- int i,j;
- for(i=0 ; i<size ; i++)
- {
- for(j=0 ; j<size ; j++)
- {
- cout.width(3);
- cout << setiosflags( ios::left ) << Data[i*size+j] <<" ";
- }
- cout<<endl;
- }
- }
- void SetData(int * Data , int size)
- {
- int count = 0;
- int i;
- int loopCount;
- for(loopCount=0 ; loopCount<size/2 ; loopCount++)
- {
- for(i=loopCount ; i<size-loopCount ; i++)
- {
- #ifdef ROUND
- Data[loopCount*size+i] = count;
- #else
- Data[loopCount*size+i] = count++;
- #endif
- }
- for(i=1+loopCount ; i<size-loopCount ; i++)
- {
- #ifdef ROUND
- Data[i*size + size-loopCount-1] = count;
- #else
- Data[i*size + size-loopCount-1] = count++;
- #endif
- }
- for(i=size-loopCount-2 ; i>=loopCount ; i--)
- {
- #ifdef ROUND
- Data[(size-loopCount-1)*size+i] = count;
- #else
- Data[(size-loopCount-1)*size+i] = count++;
- #endif
- }
- for(i=size-loopCount-2 ; i>loopCount ; i--)
- {
- #ifdef ROUND
- Data[i*size+loopCount] = count;
- #else
- Data[i*size+loopCount] = count++;
- #endif
- }
- #ifdef ROUND
- count++;
- #endif
- }
- if(size%2 != 0)
- {
- Data[size/2*size + size/2] = count;
- }
- }
- void main()
- {
- int *pArray;
- int size;
- while(1)
- {
- cout<<"请输入数组的维数(输入0退出):";
- cin>>size;
- cout<<endl;
- if(size<0)
- {
- cout<<"您的输入错误!/n";
- }
- else if(size==0)
- {
- cout<<"886!"<<endl;
- return;
- }
- pArray = new int[size*size];
- if(pArray==0)
- {
- cout<<"内存不足!"<<endl;
- return;
- }
- SetData(pArray , size);
- Display(pArray , size);
- delete [] pArray;
- }
- }