/************************************************************************** * wesnoth_shopping.c : 找出在wesnoth中給定錢幣下所可購買到的最大攻擊力時所 * 對應的剩餘最多錢幣的購買方案。 * 版權 (C) 2011 石仔 * 本程序為自由軟件:你可以依據自由軟件基金會所發布的第三版GNU通用公共許可證 * 重新發布、修改本程序。 * 雖然基于使用目的而發布本程序,但不負任何擔保責任,亦不包含適銷性或特定目 * 標之適用性的擔保。詳見GNU通用公共許可證。 * 你應該已經收到一份附隨此程序的GNU通用公共許可證副本。否則,請參閱 * 。 * ***********************************************************************/ #include #include int main(int argc, char **argv) { if(argc != 9) { printf("用法:%s <當前錢幣數量> <當前攻擊力> <當前攻擊數量> " "<攻擊力單價> <攻擊數量單價> <混合模式的單價> " "<混合模式下的攻擊力> <混合模式下的攻擊數量>\n" "備註:攻擊力是指damage,攻擊數量是指strike。\n", argv[0]); exit(EXIT_FAILURE); } int total_golds=atoi(argv[1]), remanent_golds, max_remanent_golds=0, current_damage=atoi(argv[2]), current_strike=atoi(argv[3]), damage_price=atoi(argv[4]), strike_price=atoi(argv[5]), mixed_price=atoi(argv[6]), mixed_damage=atoi(argv[7]), mixed_strike=atoi(argv[8]), max_mixed_num=total_golds/mixed_price, mixed_saved_golds=mixed_damage*damage_price +mixed_strike*strike_price-mixed_price, total_saved_golds, max_alone_damage=(total_golds-max_mixed_num*mixed_price)/damage_price, max_alone_strike=(total_golds-max_mixed_num*mixed_price)/strike_price, max_damage = damage_pricedamage_price ? total_golds/strike_price : max_alone_strike+max_mixed_num*mixed_strike, output, max_output=1, i, j; if(damage_price==0 || strike_price==0 || mixed_price==0) { printf("用法:%s <當前錢幣數量> <當前攻擊力> <當前攻擊數量> " "<攻擊力單價> <攻擊數量單價> <混合模式的單價> " "<混合模式下的攻擊力> <混合模式下的攻擊數量>\n" "備註:攻擊力是指damage,攻擊數量是指strike。\n", argv[0]); exit(EXIT_FAILURE); } printf("當前錢幣數量:%d, 當前攻擊力:%d, 當前攻擊數量:%d\n" "攻擊力單價:%d,攻擊數量單價:%d,混合模式的單價:%d," "混合模式下的攻擊力:%d,混合模式下的攻擊數量:%d\n", total_golds, current_damage, current_strike, damage_price, strike_price, mixed_price, mixed_damage, mixed_strike); /* 找出所可購買到的最大攻擊力 */ for(i=0; i<=max_damage; i++) { for(j=0; j<=max_strike; j++) { max_mixed_num = i/mixed_damage max_output) max_output=output; } } /* 找出所可購買到的最大攻擊力所對應的最大剩餘錢幣數量 */ for(i=0; i<=max_damage; i++) { for(j=0; j<=max_strike; j++) { max_mixed_num = i/mixed_damage max_remanent_golds) max_remanent_golds=remanent_golds; } } /* 找出在所可購買到的最大攻擊力時所對應的剩餘最多錢幣的購買方案 */ for(i=0; i<=max_damage; i++) { for(j=0; j<=max_strike; j++) { max_mixed_num = i/mixed_damage