2017上半年軟件設計師考試下午真題(四)

軟件設計師 責任編輯:長頸鹿 2017-05-26

添加老師微信

備考咨詢

加我微信

摘要:希賽網(wǎng)整理了2017上半年軟件設計師考試下午真題,以下是第四部分。

      >>>>點擊進入了解軟件設計師培訓視頻

    >>>>點擊進入了解軟件設計師面授班


    希賽網(wǎng)整理了2017上半年軟件設計師考試下午真題,以下是第四部分。

      試題四

      閱讀下列說明和C代碼,回答問題1至問題3,將解答寫在答題紙的對應欄內(nèi)。

      【說明】

      假幣問題:有n枚硬幣,其中有一枚是假幣,己知假幣的重量較輕?,F(xiàn)只有一個天平,要求用盡量少的比較次數(shù)找出這枚假幣。

      【分析問題】

      將n枚硬幣分成相等的兩部分:

      (1)當n為偶數(shù)時,將前后兩部分,即1...n/2和n/2+1...0,放在天平的兩端,較輕的一端里有假幣,繼續(xù)在較輕的這部分硬幣中用同樣的方法找出假幣:

      (2)當n為奇數(shù)時,將前后兩部分,即1..(n-1)/2和(n+1)/2+1...0,放在天平的兩端,較輕的一端里有假幣,繼續(xù)在較輕的這部分硬幣中用同樣的方法找出假幣:若兩端重量相等,則中間的硬幣,即第(n+1)/2枚硬幣是假幣。

      【C代碼】

      下面是算法的C語言實現(xiàn),其中:

      coins[]:硬幣數(shù)組

      first,last:當前考慮的硬幣數(shù)組中的第一個和最后一個下標

#include <stdio.h>


int getCounterfeitCoin(int coins[], int first,iot last)

{

      int firstSum = 0,lastSum = 0;

      int ì;

      If(first==last-1){        /*只剩兩枚硬幣*/

           if(coins[first] < coins[last])

                 return first;

           return last;

       }



if((last - first + 1) % 2 =0){   /*偶數(shù)枚硬幣*/

       for(i = first;i <(   1   );i++){

             firstSum+= coins[i];

        }

        for(i=first + (last-first) / 2 + 1;i < last +1;i++){

            lastSum += coins[i];

        }

        if(    2    ){

            Return getCounterfeitCoin(coins,first,first+(last-first)/2;)

        }else{

            Return getCounterfeitCoin(coins,first+(last-first)/2+1,last;)

        }

}

else{       /*奇數(shù)枚硬幣*/

        For(i=first;i<first+(last-first)/2;i++){

               firstSum+=coins[i];

        }

        For(i=first+(last-first)/2+1;i<last+1;i++){

               lastSum+=coins[i];

        }

        If(firstSum<lastSum){

               return getCounterfeitCoin(coins,first,first+(last-first)/2-1);

        }else if(firstSum>lastSum){

               return getCounterfeitCoin(coins,first+(last-first)/2-1,last);

        }else{

            Return(   3    )

        }

     }

}

      【問題一】

      根據(jù)題干說明,填充C代碼中的空(1)-(3)

      【問題二】

      根據(jù)題干說明和C代碼,算法采用了()設計策略。函數(shù)getCounterfeitCoin的時間復雜度為()(用O表示)。

      【問題三】

      若輸入的硬幣數(shù)為30,則最少的比較次數(shù)為(),最多的比較次數(shù)為()。


    >>>返回目錄:2017上半年軟件設計師考試下午真題匯總

    >>>點擊查看:2017上半年軟件設計師考試下午真題答案和解析

    >>>進入估分:2017上半年軟考分數(shù)早知道,在線估分+真題解析

更多資料
更多課程
更多真題
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,本網(wǎng)站提供的以上信息僅供參考,如有異議,請考生以權威部門公布的內(nèi)容為準!

軟考備考資料免費領取

去領取

!
咨詢在線老師!