您的位置:首页 > 其它

网易有道笔试题

2014-02-25 15:11 295 查看
这几道题都是从网上找的不知道是哪一年的网易有道的笔试题,拿来做做,练练手。

1、打印如下形式的矩阵;
n=5:

1       2       9       10      25

4       3       8       11      24

5       6       7       12      23

16      15      14      13      22

17      18      19      20      21

n=6:

1       2       9       10      25      26

4       3       8       11      24      27

5       6       7       12      23      28

16      15      14      13      22      29

17      18      19      20      21      30

36      35      34      33      32      31

分析:这道题有点类似环形打印矩阵的题,不过比那道题简单多了,规律如下:



代码:

#include<iostream>
using namespace std;

void PrintMatrix(int** arr, int n)
{
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n; ++j)
{
cout<<arr[i][j]<<'\t';
}
cout<<endl;
}
}

void SetValue(int** arr, int n)
{
arr[0][0] = 1;
int currentRow = 1, currentCol = 1;
int currentValue = 1;
while(currentRow < n)
{
//up -> down -> left
if(currentRow < n)
{
for(int i = 0; i <= currentRow; ++i)
arr[i][currentCol] = ++currentValue;
for(int i = currentCol-1; i >= 0; --i)
arr[currentRow][i] = ++currentValue;
}
++currentRow;
++currentCol;
//left -> right -> up
if(currentRow < n)
{
for(int i = 0; i <= currentCol; ++i)
arr[currentRow][i] = ++currentValue;
for(int i = currentRow - 1; i >= 0; --i)
arr[i][currentCol] = ++currentValue;
}
++currentRow;
++currentCol;
}
}

int main()
{
int n = 0;
while(cin>>n)
{
if(n <= 0)
return 1;

int** arr = new int*
;
for(int i = 0; i< n; ++i)
arr[i] = new int
;

SetValue(arr,n);
PrintMatrix(arr,n);

for(int i = 0; i < n; ++i)
delete []arr[i];
delete []arr;
}
return 0;
}

2.写一个函数,打印一个如下的n x n的矩阵

例如:

   n = 5

1 1 1 1 1

1 2 3 2 1

1 3 6 3 1

1 2 3 2 1

1 1 1 1 1

   n = 6

1 1 1 1 1 1

1 2 3 3 2 1

1 3 6 6 3 1

1 3 6 6 3 1

1 2 3 3 2 1

1 1 1 1 1 1

分析:这道题和上一题差不多了,n=6时是对称的,把左上角求出来就行了 ,左上角边上的都是1,里边的元素又是上边和左边的元素之和。



#include<iostream>
using namespace std;

void PrintMatrix(int** arr, int n)
{
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n; ++j)
{
cout<<arr[i][j]<<'\t';
}
cout<<endl;
}
}

void SetValue(int** arr, int n)
{
int bundary = (n-1)/2;
for(int i = 0; i <= bundary; ++i)
{
arr[0][i] = 1;
arr[i][0] = 1;
}
for(int i = 1; i <= bundary; ++i)
for(int j = 1; j <= bundary; ++j)
arr[i][j] = arr[i-1][j] + arr[i][j-1];

for(int i = 0; i <= bundary; ++i)
for(int j = bundary+1; j < n; ++j)
arr[i][j] = arr[i][n-1-j];

for(int i = bundary+1; i < n; ++i)
for(int j = 0; j < n; ++j)
arr[i][j] = arr[n-1-i][j];
}

int main()
{
int n = 0;
while(cin>>n)
{
if(n <= 0)
return 1;

int** arr = new int*
;
for(int i = 0; i< n; ++i)
arr[i] = new int
;

SetValue(arr,n);
PrintMatrix(arr,n);

for(int i = 0; i < n; ++i)
delete []arr[i];
delete []arr;
}
return 0;
}

3、表达式求值,一个字符串只由'+','-',和‘0’-‘9’组成,并且'+','-'只作为二元运算符。

bool calculate(const char* exp, int &result);

bool calculate( const char* str, int &result )
{
string expstr(str);
int res = 0;
int i, j = 0;
while(expstr[j] != '+' && expstr[j] != '-')
++j;
result = atoi(expstr.substr(0,j).c_str());
bool isAdd = true;
if(expstr[j] == '+')
isAdd = true;
else
isAdd = false;
i = ++j;
for(; j < expstr.length(); ++j)
if(expstr[j] != '+' && expstr[j] != '-')
continue;
else
{
int tmp = atoi(expstr.substr(i,j-i).c_str());
if(isAdd)
result += tmp;
else
result -= tmp;

if(expstr[j] == '+')
isAdd = true;
else
isAdd = false;
i = j+1;
}

int tmp = atoi(expstr.substr(i,j-i).c_str());
if(isAdd)
result += tmp;
else
result -= tmp;
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: