騰訊2016年実習生募集筆記試験


騰訊2015(2016回)実習生学校は筆記試験を募集します.選択問題以外に、五つの大きな問題があります.この中に三つのアルゴリズム類の問題があります.
第一題:抽選アルゴリズムの実現
タイトル:
一つのデパートで抽選活動が行われます.その中に二つの賞があります.一番目の賞Aが当たる確率は1/6で、二つ目の賞Bが当たる確率は5/6です.C言語コードでこの抽選プログラムを実現します.テーマはXML文書で与えられます.
基本思想:
  • は、乱数
  • を生成する.
  • 乱数対6は余りを取って、得る余りはきっと0、1、2、3、4、5の合計の6つの数の
  • です.
  • はこの6つの数を2つの部分(AとB)に分けます.その中の一つは0だけで、残りの一つは1、2、3、4、5つの項目があります.乱数取後の数を比較して、その中で今回の抽選の結果を判断しました.
    ソースコード:
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    bool draw()         //       
    {
        int ran;        //            
        srand( (unsigned)time( NULL ) );  //       
        ran = rand()%6; //     6  
        if(0 == ran)  //  ran 0
            return true; //   true
        else           //  ran  0 ,  false
            return false;
    }
    
    int main()
    {
        char ret;//     
        if(draw())  //     
            ret='A';//   true,     A
        else        //      B
            ret='B';
        printf("     :%c
    ",ret); // return 0; }
    第二題:整形長さアルゴリズムの実現
    タイトル:
    sizeof()関数を使用しない場合、32ビット、64ビットなど、本機の整形に占めるビット数を取り出します.
    基本思想:
    整数1、ずっと左に移動して、0より小さい時に、それは何位移動しましたか?本機の整形は何位占有しますか?
    ソースコード:
    #include <stdio.h>
    
    int main()
    {
    	int x=1;
    	int i=1;
    	while(x>0)
    	{
    		x=x<<1;
    		i++;
    	}
    	printf("%d
    ",i); return 0; }
    その他の方法
    http://blog.csdn.net/MichealGeng/article/details/45148995
    問題3:C/Sモデルの圧力計算方法の実現
    タイトル:
    あるC/Sモデルでは、サーバーの最大の処理量は毎秒10000回で、アルゴリズムを設計して、サーバーが正常に動作することを保証します.
    基本思想:
  • クライアントは、要求を出すごとに、サーバー側の要求キューが10000に等しい場合、以降の要求はキューに入れず、クライアントに異常フィードバックします.
  • クライアントは、要求を送信するごとに、要求を処理した後、待ち時間を計算し、待ち時間が1秒以上であれば、要求キューの中のすべての要求をサービス端末処理機能モジュールに送信し、待ち行列をクリアし、待ち時間をクリアする
  • .
  • 週間で循環を再開します.
    ソースコード:
     #include<time.h>
     double Clock_start = 0;      //       
     double Clock_end = 0;        //       
     int count = 0;               //         
     bool client = false;         //        
     //     
     void ProtectServer()    
     {
         while(1){                //         
         if(1000 <= Clock_end)    //           
         {
             /*               */
             Clock_start = clock();   //       
             count = 0;
         }
         /*        ,      , client   true */
         if(client)              //        
         {
             if(count<10000)     //             10000
             {
                 count++;        //     +1
                 /*                 */
             }
             else                //           
             {
                 /*            */
             }
         }
         client = false;         //        
         Clock_end = clock() - Clock_start;  //       
         }
     }