版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Go程序員面試分類模擬題21論述題1.
題目描述:
求出用1,2,5這三個(gè)數(shù)不同個(gè)數(shù)組合的和為100的組合個(gè)數(shù)。為了更好地理解題目的意思,下面給出幾組可能的組合:100個(gè)1,0個(gè)2和0個(gè)5,它們的(江南博哥)和為100;50個(gè)1,25個(gè)2,0個(gè)5的和也是100;50個(gè)1,20個(gè)2,2個(gè)5的和也為100。正確答案:方法一:蠻力法
最簡單的方法就是對所有的組合進(jìn)行嘗試,然后判斷組合的結(jié)果是否滿足和為100,這些組合有如下限制:1的個(gè)數(shù)最多為100個(gè),2的個(gè)數(shù)最多為50個(gè),5的個(gè)數(shù)最多為20個(gè)。實(shí)現(xiàn)思路為:遍歷所有可能的組合1的個(gè)數(shù)x(0<=x<=100),2的個(gè)數(shù)y(0=<y<=50),5的個(gè)數(shù)z(0<=z<=20),判斷x+2y+5z是否等于100,如果相等,則滿足條件,實(shí)現(xiàn)代碼如下:
packagemain
import(
"fmt"
)
funccombinationCount(nint)int{
count:=0
num1:=n
//1最多的個(gè)數(shù)
num2:=n/2
//2最多的個(gè)數(shù)
num5:=n/5
//5最多的個(gè)數(shù)
forx:=0;x<=num1;x++{
fory:=0;y<=num2;y++{
forz:=0;z<=num5;z++{
if(x+2*y+5*z==n){//滿足條件
count++
}
}
}
}
returncount
}
funcmain(){
fmt.Println(combinationCount(100))
}
程序的運(yùn)行結(jié)果為
541
算法性能分析:
這種方法循環(huán)的次數(shù)為101*51*21。
方法二:數(shù)字規(guī)律法
針對這種數(shù)學(xué)公式的運(yùn)算,一般都可以通過找出運(yùn)算的規(guī)律進(jìn)而簡化運(yùn)算的過程,對于本題而言,對x+2y+5z=100進(jìn)行變換可以得到x+5z=100-2y。從這個(gè)表達(dá)式可以看出,x+5z是偶數(shù)且x+5z<=100。因此,求滿足x+2y+5z=100組合的個(gè)數(shù)就可以轉(zhuǎn)換為求滿足“x+5z是偶數(shù)且x+5z<=100”的個(gè)數(shù)??梢酝ㄟ^對z的所有可能的取值(0<=z<=20)進(jìn)行遍歷從而計(jì)算滿足條件的x的值。
當(dāng)z=0時(shí),x的取值為0,2,4,…,100(100以內(nèi)所有的偶數(shù)),個(gè)數(shù)為(100+2)/2
當(dāng)z=1時(shí),x的取值為1,3,5,…,95(95以內(nèi)所有的奇數(shù)),個(gè)數(shù)為(95+2)/2
當(dāng)z=2時(shí),x的取值為0,2,4,…,90(90以內(nèi)所有的偶數(shù)),個(gè)數(shù)為(90+2)/2
當(dāng)z=3時(shí),x的取值為1,3,5,…,85(85以內(nèi)所有的奇數(shù)),個(gè)數(shù)為(85+2)/2
當(dāng)z=19時(shí),x的取值為5,3,1(5以內(nèi)所有的奇數(shù)),個(gè)數(shù)為(5+2)/2
當(dāng)z=20時(shí),x的取值為0(0以內(nèi)所有的偶數(shù)),個(gè)數(shù)為(0+2)/2
根據(jù)這個(gè)思路,實(shí)現(xiàn)代碼如下:
funccombinationCount2(nint)int{
count:=0
form:=0;m<=n;m+=5{
count+=(m+2)/2=
}
returncount
}
算法性能分析:
這種方法循環(huán)的次數(shù)為21。[考點(diǎn)]如何組合1,2,5這三個(gè)數(shù)使其和為100
2.
題目描述:
100個(gè)燈泡排成一排,第一輪將所有燈泡打開;第二輪每隔一個(gè)燈泡關(guān)掉一個(gè),即排在偶數(shù)的燈泡被關(guān)掉,第三輪每隔兩個(gè)燈泡,將開著的燈泡關(guān)掉,關(guān)掉的燈泡打開。依次類推,第100輪結(jié)束的時(shí)候,還有幾盞燈泡亮著?正確答案:對于每盞燈,當(dāng)拉動(dòng)的次數(shù)是奇數(shù)時(shí),燈就是亮著的,當(dāng)拉動(dòng)的次數(shù)是偶數(shù)時(shí),燈就是關(guān)著的。
(2)每盞燈拉動(dòng)的次數(shù)與它的編號所含約數(shù)的個(gè)數(shù)有關(guān),它的編號有幾個(gè)約數(shù),這盞燈就被拉動(dòng)幾次。
(3)1~100這100個(gè)數(shù)中有哪幾個(gè)數(shù),約數(shù)的個(gè)數(shù)是奇數(shù)?
我們知道,一個(gè)數(shù)的約數(shù)都是成對出現(xiàn)的,只有完全平方數(shù)約數(shù)的個(gè)數(shù)才。是奇數(shù)個(gè)。
所以,這100盞燈中有10盞燈是亮著的,它們的編號分別是:1、4、9、16、25、36、49、64、81、100。
下面是程序的實(shí)現(xiàn):
packagemain
import(
"fmt"
)
funcfactorIsOdd(aint)int{
vartotalint
fori:=1;i<=a;i++{
ifa%i==0{total++)
}
iftotal%2==1{return1)else{return0}
}
functotalCount(num[]int,nint)int{
varcoumint
fori:=0;i<n;i++{
//判斷因子數(shù)是否為奇數(shù),如果是奇數(shù)(燈亮)則加1
iffactorIsOdd(num[i])==1{
fmt.Println("亮著的燈的編號是:",num[i])
count++
}
}
returncount
}
funcmain(){
num:=make([]int,100)
fori:=0;i<100;i++{num[i]=i+1}
count:=totalCount(num,100)
fmt.Println("最后總共有",count,"盞燈亮著")
}
程序的運(yùn)行結(jié)果為
亮著的燈的編號是:1
亮著的燈的編號是:4
亮著的燈的編號是:9
亮著的燈的編號是:16
亮著的燈的編號是:25
亮著的燈的編號是:36
亮著的燈的編號是:49
亮著的燈的編號是:64
亮著的燈的編號是:81
亮著的燈的編號是:100
最后總共有10盞燈亮著。[考點(diǎn)]如何判斷還有幾盞燈泡還亮著
3.
如何進(jìn)行選擇排序?正確答案:選擇排序是一種簡單直觀的排序算法,它的基本原理如下:對于給定的一組記錄,經(jīng)過第一輪比較后得到最小記錄,然后將該記錄與第一個(gè)記錄的位置進(jìn)行交換;接著對不包括第一個(gè)記錄以外的其他記錄進(jìn)行第二輪比較,得到最小記錄并與第二個(gè)記錄進(jìn)行位置交換;重復(fù)該過程,直到進(jìn)行比較的記錄只有一個(gè)時(shí)為止。以數(shù)組{38,65,97,76,13,27,49}為例,具體步驟如下:
第一趟排序后:13[659776382749]
第二趟排序后:1327[9776386549]
第三趟排序后:132738[76976549]
第四趟排序后:13273849[976576]
第五趟排序后:1327384965[9776]
第六趟排序后:132738496576[97]
最后排序結(jié)果:13273849657697
程序示例如下:
packagemain
import(
"fmt"
)
funcSelectSort(data[]int){
llen:=len(data)
fori:=0;i<llen;i++{
tmp:=data[i]
flag:=i
forj:=i+1;j<llen;j++{
ifdata[j]<tmp{
tmp=data[j]
flag=j
}
}
ifflag!=i{
data[flag]=data[i]
data[i]=tmp
}
}
}
funcmain(){
data:=[]int{5,4,9,8,7,6,0,1,3,2}
SelectSort(data)
fmt.Println(data)
}
程序運(yùn)行結(jié)果為:
0123456789[考點(diǎn)]如何進(jìn)行選擇排序
4.
題目描述:
如何進(jìn)行插入排序?正確答案:對于給定的一組記錄,初始時(shí)假設(shè)第一個(gè)記錄自成一個(gè)有序序列,其余的記錄為無序序列。接著從第二個(gè)記錄開始,按照記錄的大小依次將當(dāng)前處理的記錄插入到其之前的有序序列中,直至最后一個(gè)記錄插入到有序序列中為止。以數(shù)組{38,65,97,76,13,27,49}為例,直接插入排序具體步驟如下:
第一步插入38以后:[38]659776132749
第二步插入65以后:[3865]9776132749
第三步插入97以后:[386597]76132749
第四步插入76以后:[38657697]132749
第五步插入13以后:[1338657697]2749
第六步插入27以后:[132738657697]49
第七步插入49以后:[13273849657697]
程序示例如下:
packagemain
import(
"fmt"
)
funcInsertSort(array[]int){
ifarray==nil{return}
fori:=1;i<len(array);i++{
trap,j:=array[i],i
ifarray[j-1]>tmp{
forj>=1&&array[j-1]>tmp{
array[j]=array[j-1]
j--
}
}
array[j]=tmp
}
}
funcmain(){
array:=[]int{7,3,19,40,4,7,1};
InsenSort(array);
fmt.Println(array)
}
程序運(yùn)行結(jié)果為:
134771940[考點(diǎn)]如何進(jìn)行插入排序
5.
題目描述:
如進(jìn)行冒泡排序?正確答案:冒泡排序顧名思義就是整個(gè)過程就像氣泡一樣往上升,單向冒泡排序的基本思想是(假設(shè)由小到大排序):對于給定的n個(gè)記錄,從第一個(gè)記錄開始依次對相鄰的兩個(gè)記錄進(jìn)行比較,當(dāng)前面的記錄大于后面的記錄時(shí),交換其位置,進(jìn)行一輪比較和換位后,n個(gè)記錄中的最大記錄將位于第n位;然后對前(n-1)個(gè)記錄進(jìn)行第二輪比較;重復(fù)該過程直到進(jìn)行比較的記錄只剩下一個(gè)時(shí)為止。
以數(shù)組{36,25,48,12,25,65,43,57}為例,具體排序過程如下:
一趟排序的過程如下:
R[1]3625252525252525
R[2]2536363636363636
R[3]4848481212121212
R[4]1212124825252525
R[5]2525252548484848
R[6]6565656565654343
R[7]4343434343436557
R[8]5757575757575765
則經(jīng)過多趟排序后的結(jié)果如下:
初始狀態(tài):[3625481225654357]
1趟排序:[2536122548435765]
2趟排序:[251225364348]5765
3趟排序:[1225253643]485765
4趟排序:[12252536]43485765
5趟排序:[122525]3643485765
6趟排序:[1225]253643485765
7趟排序:[12]25253643485765
程序示例如下:
packagemain
import(
"fmt"
)
funcBubbleSort(array[]jnt){
llen:=len(array)
fori:=0;i<llen-1;i++{
forj
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《游泳服務(wù)與管理》課件
- 《電力企業(yè)流程管理》課件
- 《電磁輻射及預(yù)防》課件
- 2024年高考生物一輪復(fù)習(xí)必修二第五單元遺傳的基本規(guī)律試題
- 單位管理制度集合大合集【人力資源管理】十篇
- 單位管理制度集粹匯編職員管理篇十篇
- 單位管理制度分享匯編【員工管理】十篇
- 單位管理制度分享大全【人員管理】十篇
- 單位管理制度呈現(xiàn)合集【員工管理】十篇
- 《團(tuán)隊(duì)建設(shè)與發(fā)展》課件
- 《論語》中的人生智慧與自我管理學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024年金融理財(cái)-金融理財(cái)師(AFP)考試近5年真題附答案
- 2022版義務(wù)教育物理課程標(biāo)準(zhǔn)
- 數(shù)字資產(chǎn)管理與優(yōu)化考核試卷
- 期末測試-2024-2025學(xué)年語文四年級上冊統(tǒng)編版
- 教案-“枚舉法”信息技術(shù)(信息科技)
- 2024年內(nèi)部審計(jì)年度工作計(jì)劃范文(六篇)
- 四川省成都市2021-2022學(xué)年物理高一下期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 光伏發(fā)電系統(tǒng)租賃合同范本
- 新教科版六年級上冊科學(xué)全冊知識點(diǎn)(期末總復(fù)習(xí)資料)
- 綠色建筑工程監(jiān)理實(shí)施細(xì)則
評論
0/150
提交評論