乙個袋子裡有30個銀幣,其中一枚是假幣,並且假幣和真幣一模一樣,肉眼難以分辨,目前已知假幣比真幣重量輕一點。請問,如何分辨出假幣?
首先為每個銀幣編號,然後將所有的銀幣等分為兩份,放在天平的兩邊。這樣就將區分30個銀幣的問題變為區別兩堆銀幣的問題。
因為假幣分量較輕,因此天平較輕的一側中一定包含假幣。
再將較輕的一側中銀幣等分為兩份,重複上述做法。
直到剩下兩枚銀幣,便可用天平直接找出假銀幣。
#include
//本題是c語言菜鳥編寫,部分**贅餘,請見諒!!
//注意當我們用遞迴時,一定要返回你說遞迴的值!!
intgetplace
(int a,
int cen,
int hlen)
;int
weight
(int x,
int cen,
int hlen)
;int
main()
;//用該陣列代表一組硬幣,1為真幣,0為假幣
int place;
place =
getplace
(a,15,30
);printf
("假幣是第 %d 個\n"
,place+1)
;return0;
}int
getplace
(int a,
int cen,
int len)
//cen表示該陣列的中心,len表示該陣列的長度
else
//判斷不止有兩個硬幣的情況
else
//此情況是劃分時長度不能被2整除的情況
if(a[cen+hlen]
> a[cen+hlen-1]
)//這是該部分倒數第二個的硬幣為假
if(a[cen+hlen]
< a[cen+hlen-1]
)}}return adr;
//返回假幣的位置
}int
weight
(int x,
int pla,
int mid)
//用於判斷某部分的硬幣總質量
return sum;
}
C語言 遞迴演算法思想
繼上篇博文裡介紹的c語言常見基礎演算法,本篇在於演算法的思路的整理和常見的演算法程式設計實現。定義 遞迴具體用法其實就是讓你把乙個問題分解成很多個類似的情況,雖然你要解決這個問題非常難,莫名其妙,要你想幾年,但是把他一直遞迴分解,就變成很好理解的單種情況,而你整個問題又是跟這個單種情況類似,把整個問...
C 基礎演算法學習 猜假幣
有12枚硬幣。其中有11枚真幣和1枚假幣。假幣和真 幣重量不同,但不知道假幣比真幣輕還是重。現在,用一架天平稱了這些幣三次,告訴你稱的結果,請你 找出假幣並且確定假幣是輕是重 資料保證一定能找 出來 例題 poj1013 稱硬幣 輸入 第一行是測試資料組數。每組資料有三行,每行表示一次稱量的結果。銀...
C語言實現遞迴演算法
c語言實現遞迴演算法 遞迴演算法是運用於函式呼叫中的。遞迴的概念 在乙個函式體內呼叫自身稱為函式的遞迴呼叫。遞迴呼叫的原理 需要在函式內滿足一定的條件後不在呼叫自身或者結束,或者呼叫其它函式,否則容易出現類似死迴圈的情況,程式將癱瘓。已知 f 1 1 f 0 0,fn n f n 1 f n 2 求...