English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

輸入N元兌換成等值一元 五元 十元 五十元方法有幾種?(如輸入100元 可以用100個一元 20個5元 10個10元  2個50元 一個50元與五個10元 1個50元與10個五元...如此列推...)
限制條件:
1.每個硬幣最少要有一個(大於66元以上)
2.低於66元以下也能計算出方法(例如五十元 如果每個硬幣最少有一個勢必爆掉 但是單單一枚五十元硬幣 及五十個一元硬幣或五個十元硬幣也是方法之內)
3.不能使用FOR NEXT(應該說用FOR NEXT無法寫出來=.=\")
如果上面的敘述有看不懂的地方 可以用最下面的意見告知一聲 讓我做些修正 謝謝

2006-02-22 18:07:16 · 3 個解答 · 發問者 𠈌楓の影𩖸 2 in 電腦與網際網路 程式設計

TO二樓:
我VB其實也不是很好(VB被當的傢伙=.=")不太懂你寫的意思 能不能在簡化或詳細解說好嗎...謝謝...

2006-02-26 16:32:36 · update #1

還有如果這個程式用mod函數和do loop迴圈要怎寫....(寫了半天寫不出來>

2006-02-26 17:31:05 · update #2

TO四樓:
我這個程式是要用vb寫...c++是可以寫出來但有些語法我根本就看不懂>

2006-02-28 18:13:49 · update #3

3 個解答

其實可以用很直觀的方法去寫(已測試過)
因為你看起來應該有基礎,我就用比較直接的方法解釋
先判斷If Money<=66 成立Money=Money-66,並且建立一個Boolean來記錄這項資訊
之後不管用Do還是For都可以
在執行下一層迴圈之前,先紀錄現在的Money
我用兩層的來舉個例(10元和5元)
Do While Money >= 0
MoneySaveAt5 = Money '記錄到目前為止、也就是決定十元有幾枚後剩下的錢
D5Count = 0 '5元的數量
Do While Money >= 0 '當錢非負值時執行
D1Count = Money '剩下的錢當然全部是1元
'此時就可以Show結果了!
D5Count = D5Count + 1 '多一枚5元,並計算多一枚5元後會剩多少錢
Money = MoneySaveAt5 - D5Count * 5
Loop
D10Count = D10Count + 1 '多一枚10元,並計算多一枚10元後會剩多少錢
Money = MoneySaveAt10 - D10Count * 10
Loop
Show結果之後,記得把之前檢查是否超過66元的部份補上去!
因為我們已經各把一個拿掉了,也就是拿掉了66元。

2006-02-23 06:28:53 補充:
以下網址使用本人由Yahoo之部落格空間,那邊支援Html語法,可以弄得比較有結構,並含有整段函式(參考前請三思!)http://tw.myblog.yahoo.com/jw!dFA2WIqeGQNnFc_blP0-/article?mid=17&prev=-1&next=5

2006-02-27 11:57:50 補充:
請說說不懂的部份,如果覺得麻煩可以即時通問我...

2006-02-27 12:12:35 補充:
上面部落格幾乎每行都加上了注解,可以去看看有沒有比較容易了解

2006-02-22 09:05:49 · answer #1 · answered by litfal 5 · 0 0

這些你如果可以的話就參考看看吧!
因為我沒有vb所以就只好用c語言的方式寫給妳
至於用餘數的方式要怎麼寫...我還沒想出一個大概來=.=
對下面的程式有問題的話就找我即時通吧【angus_very_cool】

#include
#include
#include
int main()
{
int w,x,y,z,sum=0,money;
printf("請輸入金額:"),scanf("%d",&money);
if(money<66)
{
for(w=0;w<=money/50;w++)
{
for(x=0;x<=money/10;x++)
{
for(y=0;y<=money/5;y++)
{
for(z=0;z<=money;z++)
{
if(money==w*50+x*10+y*5+z)
{
sum++;
}
}
}
}
}
}
else
{
for(w=1;w<=money/50;w++)
{
for(x=1;x<=money/10;x++)
{
for(y=1;y<=money/5;y++)
{
for(z=1;z<=money;z++)
{
if(money==w*50+x*10+y*5+z)
{
sum++;
}
}
}
}
}
}
printf("%d\n",sum);
system("PAUSE");
return 0;
}

2006-02-26 18:27:45 · answer #2 · answered by ? 6 · 0 0

'我的方式是66元以下不限制硬幣的數量(任何組合皆可),否則每種硬幣須至少一個,請在表單設置一個CommandButton跟一個ListBox
Private Sub Command1_Click()
Dim A As Integer
List1.Clear
A = Val(InputBox("請輸入金額"))
If A = 0 Then Exit Sub
Cal A
MsgBox "總共有" & List1.ListCount & "組"
End Sub

Sub Cal(ByVal N As Integer)
Dim A(3) As Integer, P As Integer, I As Integer, T As Long, B As Boolean, M, X
M = Array(50, 10, 5, 1): X = Array(N \ 50, N \ 10, N \ 5, N): P = 3
Do
 T = 0: B = True
 For I = 0 To 3
   T = T + A(I) * M(I): If A(I) = 0 Then B = False
 Next
 If T = N Then
  If (N > 65 And B) Or N < 66 Then
   List1.AddItem M(0) & "(" & A(0) & ")," & M(1) & "(" & A(1) & ")," & M(2) & "(" & A(2) & ")," & M(3) & "(" & A(3) & ")"
  End If
 End If
 A(P) = A(P) + 1
 If A(P) > X(P) Then
  Do
   P = P - 1
   If P < 0 Then Exit Do
   A(P) = A(P) + 1
   For I = P + 1 To 3
     A(I) = 0
   Next
  Loop Until A(P) <= X(P)
  P = 3
 End If
Loop Until A(0) > X(0)
End Sub

2006-02-27 18:16:33 補充:
我其實就是用Do~Loop去做的啊,因為之前就有人用For~Next去做我才想用別的方式做做看,M陣列是幣值,X陣列是每種幣值之最大值,把每種幣值之最大值當成進位的依據,如以金額100為例:X=(2,10,20,100)從 0,0,0,0→0,0,0,1→0,0,0,2...→0,0,0,100→0,0,1,0→0,0,1,1...→0,0,20,0→0,1,0,1...一直到→3,0,0,0就跳出迴圈.此程式的優點是若把M改成動態陣列,幣值就可動態輸入,當然還有很多要改進的地方,可是板面放不下XD

2006-02-28 18:25:20 補充:
改良版,改成動態輸入幣值,且效率比較快(連結只能放7天)http://s30.yousendit.com/d.aspx?id=21YFKJ4W9FMLL291WUH7DMG5RI

2006-02-25 03:42:27 · answer #3 · answered by W.J.S. 7 · 0 0

fedest.com, questions and answers