`
superwind
  • 浏览: 34269 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

有道笔试题

阅读更多

这道面试题是网上找的,不知道是否真的是有道的笔试题。

------------------------------------------------------------------

打印 如下形式 的矩阵;


n=5:

1   2   9 10 25
4   3   8 11 24
    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

--------------------------------------------------------------------

解题思路:

1. 假设数组的编号从1开始

2. 则对角线上的元素值为: a[i][i]= i*i-i+1;

    如果i为奇数,则a[i][i]上方的元素依次递增,左侧元素依次递减;

    如果i为偶数,则a[i][i]上方的元素依次递减,左侧元素依次递增;

 

优化后的代码:

int compute(int i,int j)
{
	int max = i>j?i:j;
	if (max%2)
		return max*max -max +1 -(i-j);
	else
		return max*max -max +1 +(i-j); 
}

void printMatrix2(int n)
{
    for(int i=1;i<=n;i++)
    {
		for (int j=1;j<=n;j++)
		{
			printf("%2d ", compute(i,j));
		}
		printf("\n");
    }
	
}

int main(int argc, char* argv[])
{
	printMatrix2(6);
	return 0;
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics