台灣最大程式設計社群網站
線上人數
1377
 
會員總數:246319
討論主題:189850
歡迎您免費加入會員
討論區列表 >> Java >> 程式由C轉JAVA
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
程式由C轉JAVA
價值 : 40 QP  點閱數:1096 回應數:2
樓主

梅菊客
門外漢
0 2
18 2
發送站內信

問題描述 :
有一名貨車司機要將倉庫中的商品運到賣場,每件商品的價值與重量都不同,司機想在貨車可承受的最大重量下,將價值最高的幾樣商品運到賣場。
( 貨車負重為 20) ( 貨車與倉庫請以 stack 實作 )
選擇要運送商品的規則是:
1. 若目前商品在負重範圍內,則直接將商品運上貨車。
2. 若目前商品運上貨車後超過負重,則檢查貨車上最後一項商品
a) 若其價值 / 重量比例低於要運上車的商品,則不選此項商品。
b) 若其價值 / 重量比例高於要運上車的商品,則將貨車上最後一項商品的物品替換成目前商品
輸入說明 :
第一行輸入為倉庫中的 商品 數量,
第二行以後每行是依序放進倉庫堆疊中每件 商品 的價值與重量。
輸出說明 :
輸出為貨車上的物品總價值及物品總重量。
範例 :
輸入範例

3/5(價值/重量)
6/8(價值/重量)
4/1(價值/重量)
9/2(價值/重量)
8/8(價值/重量)
輸出範例
27/19(價值/重量)



#include <stdio.h>

int main() {
int n;
while(scanf("%d", &n) == 1) {
int sk1[100], sk2[100];
int idx = -1, i;
int tot = 0, p = 0, v, w;
int vv[100], ww[100];
for(i = n-1; i >= 0; i--)
scanf("%d %d", &vv[i], &ww[i]);
for(i = 0; i < n; i++) {
v = vv[i], w = ww[i];
if(tot+w <= 20) {
++idx;
sk1[idx] = v, sk2[idx] = w;
tot += w, p += v;
} else {
if((double)sk1[idx]/sk2[idx] > (double)v/w) continue;
if((double)sk1[idx]/sk2[idx] < (double)v/w) {
tot -= sk2[idx], p -= sk1[idx];
sk1[idx] = v, sk2[idx] = w;
tot += w, p += v;
}
}
}
printf("%d %d\n", p, tot);
}
return 0;
}





搜尋相關Tags的文章: [ C ] , [ JAVA ] ,
本篇文章發表於2015-06-21 21:54
1樓
作者回應

梅菊客
檢舉此回應
這次程式主題是JAVA= =....
以前有做過不過不會打成JAVA
有請各位大大幫忙!!!!
本篇文章回覆於2015-06-21 21:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

梅菊客
檢舉此回應
請問有人可以幫助嗎 ~~~~~拜託惹
本篇文章回覆於2015-06-24 12:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.