C 語言 假幣問題的遞迴演算法

2021-10-01 19:57:09 字數 1162 閱讀 9381

乙個袋子裡有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 求...