算法:10元能夠喝幾瓶啤酒?

題目:
啤酒2塊錢1瓶,
4個瓶蓋換1瓶
2個空瓶換1瓶算法

問:10塊錢能夠喝幾瓶?編程

什麼語言實現並不重要, 先要想好算法。而後在實現啊變量

=======================================================循環

gai + ping + jiu = 2, 4 * gai = 2, 2 * ping = 2, gai = 1/2, ping = 1, jiu = 1/2, 10 / jiu = 10 / (1/2) = 20db

價值計算:
gai + ping + jiu = 2, 4 * gai = 2, 2 * ping = 2,
gai = 1/2, ping = 1, jiu = 1/2, 語言


理想解:
10 / jiu = 10 / (1/2) = 20 di


瓶和蓋不通用解:
10 = 5 * jiu + 5 * gai + 5 * ping
5 * gai + 5 * ping = 3 * jiu + 1 * gai + 1 * ping + 3 * gai + 3 * ping
4 * gai + 4 * ping = 3 * jiu + 3 * gai + 3 * ping
3 * gai + 3 * ping = 1 * jiu + 3 * gai + 1 * ping + 1 * gai + 1 * ping
4 * gai + 2 * ping = 2 * jiu + 2 * gai + 2 * ping
2 * gai + 2 * ping = 1 * jiu + 2 * gai + 1 * gai + 1 * ping
3 * gai + 1 * ping = 0 * jiu + 3 * gai + 1 * pingping

3 + 3 + 1 + 2 + 1 = 10 * jiu, 3 * gai + 1 * pingdata

瓶和蓋通用解:
10 = 5 * jiu + 5 * gai + 5 * ping
5 * gai + 5 * ping = 3 * jiu + 1 * gai + 1 * ping + 3 * gai + 3 * ping
4 * gai + 4 * ping = 3 * jiu + 3 * gai + 3 * ping
3 * gai + 3 * ping = 1 * jiu + 3 * gai + 1 * ping + 1 * gai + 1 * ping
4 * gai + 2 * ping = 2 * jiu + 2 * gai + 2 * ping
2 * gai + 2 * ping = 1 * jiu + 2 * gai + 1 * gai + 1 * ping
3 * gai + 1 * ping = 1 * jiu + 1 * gai + + 1 * gai + 1 * ping
2 * gai + 1 * ping = 1 * jiu + 1 * gai + 1 * ping

3 + 3 + 1 + 2 + 1 + 1 + 1 = 12 jiu, 1 * gai + 1 * ping
----------------------------------------------------------------------------------

價值計算:
gai + ping + jiu = 2, 4 * gai = 2, 2 * ping = 2,
gai = 1/2, ping = 1, jiu = 1/2,


超級理想解:
10 / jiu = 10 / (1/2) = 20

瓶和蓋通用解: 瓶和蓋不通用狀況的,符合實際的(最後買一瓶,最後剩1瓶1蓋) 理想解
10 = 5 * jiu + 5 * gai + 5 * ping
5 * gai + 5 * ping = 3 * jiu + 1 * gai + 1 * ping + 3 * gai + 3 * ping
4 * gai + 4 * ping = 3 * jiu + 3 * gai + 3 * ping
3 * gai + 3 * ping = 1 * jiu + 3 * gai + 1 * ping + 1 * gai + 1 * ping
4 * gai + 2 * ping = 2 * jiu + 2 * gai + 2 * ping
2 * gai + 2 * ping = 1 * jiu + 2 * gai + 1 * gai + 1 * ping
3 * gai + 1 * ping = 1 * jiu + 1 * gai + + 1 * gai + 1 * ping
2 * gai + 1 * ping = 1 * jiu + 1 * gai + 1 * ping

3 + 3 + 1 + 2 + 1 + 1 + 1 = 12 jiu, 1 * gai + 1 * ping


瓶和蓋不通用解:
10 = 5 * jiu + 5 * gai + 5 * ping
5 * gai + 5 * ping = 3 * jiu + 1 * gai + 1 * ping + 3 * gai + 3 * ping
4 * gai + 4 * ping = 3 * jiu + 3 * gai + 3 * ping
3 * gai + 3 * ping = 1 * jiu + 3 * gai + 1 * ping + 1 * gai + 1 * ping
4 * gai + 2 * ping = 2 * jiu + 2 * gai + 2 * ping
2 * gai + 2 * ping = 1 * jiu + 2 * gai + 1 * gai + 1 * ping
3 * gai + 1 * ping = 0 * jiu + 3 * gai + 1 * ping

3 + 3 + 1 + 2 + 1 = 10 * jiu, 3 * gai + 1 * ping

如今問題來了,如何在瓶和蓋不通用的狀況下達到理想解

----------------------------------------------------------------------------------

價值計算:
gai + ping + jiu = 2,
4 * gai = 2, 2 * ping = 2,
gai = 1/2, ping = 1,
jiu = 2 - 1/2 - 1 = 1/2,


超級理想解:
10 / jiu = 10 / (1/2) = 20

瓶和蓋通用解: 瓶和蓋不通用狀況的,符合實際的(最後買一瓶,最後剩1瓶1蓋) 理想解
10 = 5 * jiu + 5 * gai + 5 * ping
5 * gai + 5 * ping = 3 * jiu + 1 * gai + 1 * ping + 3 * gai + 3 * ping = 4 * gai + 4 * ping
4 * gai + 4 * ping = 3 * jiu + 3 * gai + 3 * ping
3 * gai + 3 * ping = 2 * jiu + 1 * gai + 2 * gai + 2 * ping = 3 * gai + 2 * ping
3 * gai + 2 * ping = 1 * jiu + 3 * gai + 1 * gai + 1 * ping = 4 * gai + 1 * ping
4 * gai + 1 * ping = 1 * jiu + 1 * ping + 1 * gai + 1 * ping = 1 * gai + 2 * ping
1 * gai + 2 * ping = 1 * jiu + 1 * gai + 1 * gai + 1 * ping = 2 * gai + 1 * ping
2 * gai + 1 * ping = 1 * jiu + 1 * gai + 1 * ping

5 + 3 + 3 + 2 + 1 + 1 + 1 + 1 = 17 * jiu, 1 * gai + 1 * ping
驗證:17 * 1/2 + 1 * 1/2 + 1 * 1 = 10 == 10


瓶和蓋不通用解:
10 = 5 * jiu + 5 * gai + 5 * ping
5 * gai + 5 * ping = 3 * jiu + 1 * gai + 1 * ping + 3 * gai + 3 * ping
4 * gai + 4 * ping = 3 * jiu + 3 * gai + 3 * ping
3 * gai + 3 * ping = 1 * jiu + 3 * gai + 1 * ping + 1 * gai + 1 * ping
4 * gai + 2 * ping = 2 * jiu + 2 * gai + 2 * ping
2 * gai + 2 * ping = 1 * jiu + 2 * gai + 1 * gai + 1 * ping
3 * gai + 1 * ping = 0 * jiu + 3 * gai + 1 * ping

5 + 3 + 3 + 1 + 2 + 1 = 15 * jiu, 3 * gai + 1 * ping
驗證:15 * 1/2 + 3 * 1/2 + 1 * 1 = 10 == 10


如今問題來了,如何在瓶和蓋不通用的狀況下達到理想解


=================================================================================


下面是一個網友用匯編作的題:

assume cs:cao,ds:data

data segment

kp dw 2 ;瓶
gai dw 4 ;蓋
qian db 10 ; 錢
ping dw 0 ;總瓶數
data ends
cao segment
s:mov ax,data
mov ds,ax
mov dx,0 ; DX爲蓋子累加數
mov di,0 ;di爲瓶累加數
mov cl,qian ;錢數
s0:sub cl,2 ;每次一瓶就是2元
inc ping ;總瓶數加1

mov si,ping ;SI爲間接變量
sub si,di ;總瓶數-瓶子累加等於真值

cmp si,kp ;真值對比是否大於2
ja ok ;大於跳
kk:mov si,ping ; SI爲間接變量
sub si,dx ;總蓋子-累加蓋子等於真值

cmp si,gai ;真值對比是否大於4
jcxz jiesu ;錢是否爲0
jb s0 ;蓋子是否小於,否不知足加瓶數條件
inc ping ;知足條件
add dx,4 ;累加蓋子加4
jmp s0 ;循環
jiesu:mov ax,4c00h ;退出
int 21h
ok:inc ping ;總瓶子累加
add di,2 ;瓶子記錄
jmp kk

cao ends
end s

 

出處:QQ羣:編程算法&思想(459909287)

相關文章
相關標籤/搜索