当前位置:编程学习 > C/C++ >>

[互联网面试笔试汇总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语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,