[互联网面试笔试汇总C/C++-2] 网易有道-1
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
这种题目就是找规律,无非就是你花多长时间找出来而已。
我们假设下标为(i,j),i,j都从1开始,规律如下(比较懒,推倒过程省去):
当i>=j时
如果i为偶数:number[i][j] = i*i + 1 - j;
如果i为奇数:number[i][j] = (i-1)*(i-1) + j;
当j>=i时,
如果j为偶数:number[i][j] = (j-1)*(j-1) + i;
如果j为奇数:number[i][j] = j*j + 1 - i;
代码如下:
#include<stdio.h> void printMatrix(int n); int main() { printMatrix(5); system("pause"); return 0; } void printMatrix(int n){ if(n < 1) return; else{ int i ,j; for(i = 1;i <=n;i++){ for(j = 1;j <= n;j++){ int num; if(j > i){ if(j%2) num = j*j + 1 -i; else num = (j-1)*(j-1)+i; printf("%d ",num); }else{ if(i%2) num = (i-1)*(i-1)+j; else num = i*i + 1 - j; printf("%d ",num); } } printf("\n"); } } }
2、36匹马赛跑,跑道同时只能容许6匹马。而且36匹马速度不同,但是每次跑的速度恒定。
问,跑多少次可以选出第一,第二,第三名。
分析:
第一步,我们将36匹马分成6支队伍,编号如下:
A1,A2,...,A6;
B1,B2,...,B6;
C1,C2,...,C6;
D1,D2,...,D6;
E1,E2,...,E6;
F1,F2,...,F6;
每支队伍单独跑一次,这样总共跑了6次。我们假设跑完的排名和上面的顺序是一样的(这个对结果无影响)。
第二步,让每支队伍的第一名在一起跑,取前三名,我们假设是A1,B1和C1.那么A1肯定是整体的第一名,下面只剩下第二和第三两匹马了。
第三步,有可能成为第二名和第三名的马的数量是有限的,基于第一和第二步,我们可以推出可能成为第二和第三名的马有A2,A3,B1,B2,C1,一共五匹。让这五匹马一起跑,选出前两名,就分别是整体的第二和第三名。
总结:第一步,跑了6次;第二步,跑了1次;第三步,跑了1次,一共8次。
补充:软件开发 , C语言 ,