OpenJudge 1017:裝箱問題 解題報告

總時間限制: 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) 強制轉型

相關文章
相關標籤/搜索