總時間限制: html
1000msjava
內存限制: 數組
65536kB測試
描述設計
一個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別爲1*1, 2*2, 3*3, 4*4, 5*5, 6*6。這些產品一般使用一個 6*6*h 的長方體包裹包裝而後郵寄給客戶。由於郵費很貴,因此工廠要千方百計的減少每一個訂單運送時的包裹數量。他們很須要有一個好的程序幫他們解決這個問題從而節省費用。如今這個程序由你來設計。code
輸入htm
輸入文件包括幾行,每一行表明一個訂單。每一個訂單裏的一行包括六個整數,中間用空格隔開,分別爲1*1至6*6這六種產品的數量。輸入文件將以6個0組成的一行結尾。blog
輸出內存
除了輸入的最後一行6個0之外,輸入文件裏每一行對應着輸出文件的一行,每一行輸出一個整數表明對應的訂單所需的最小包裹數。產品
樣例輸入
0 0 4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 0
樣例輸出
2 1
來源
Central Europe 1996
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n, a, b, c, d, e, f, y, x; // n 用來存儲須要的箱子數目 // y 用來存儲 2*2 的空位數目 // x 用來存儲 1*1 的空位數目 int[] u = { 0, 5, 3, 1 }; // 數組 u 表示 3*3 的產品數目分別是 4的倍數, 4的倍數+1, 4的倍數+2, 4的倍數+3時, 爲 3*3 // 的產品打開的新箱子中剩餘的 // 2*2 的空位的個數 while (scanner.hasNext()) { a = scanner.nextInt(); b = scanner.nextInt(); c = scanner.nextInt(); d = scanner.nextInt(); e = scanner.nextInt(); f = scanner.nextInt(); if (a == 0 && b == 0 && c == 0 && d == 0 && e == 0 && f == 0) { break; } n = f + e + d + (c + 3 )/ 4; //n = f + e + d + (int) Math.ceil((double)c / 4); y = 5 * d + u[c % 4]; if (b > y) { n += (b - y + 8) / 9; //n += (int) Math.ceil((double)(b - y) / 9); } x = 36 * n - 36 * f - 25 * e - 16 * d - 9 * c - 4 * b; if (a > x) { n += (a - x + 35) / 36; //n += (int) Math.ceil((double)(a - x) / 36); } System.out.println(n); } scanner.close(); } }
藉助如下1000條測試數據, 我才找出本身程序的bug, 終於被 Accepted.
http://www.cnblogs.com/ZiningTang/p/3837073.html
提示: 在Java中, 整數除法會徹底忽略小數部分, 因此要獲得小數部分, 務必用 (double) 強制轉型