Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

JAVA做的 一直WA 测试了好多数据都没找到原因 哪位大神能帮我找出来 谢~

Posted by dai418647405 at 2014-10-29 20:33:21 on Problem 3040
import java.util.Scanner;

public class Main {

	private Scanner sc;
	
	private int n;
	private Money[] money;//一行输入存到一个money对象中
	private int lengthOfArray;
	
	private int amountOfMoney;//每周给的最少的钱数额
	private int maxNumberOfWeeks;//最多付的周数
	
	
	public Main() {
		
		sc = new Scanner(System.in);
		maxNumberOfWeeks = 0;  
	}
	

	public void input() {
		
		n = sc.nextInt();
		amountOfMoney = sc.nextInt();
		
		money = new Money[n];
		
		int denomination = 0;//面值
		int numberOfCoinsOfTheDenomination = 0;//相应面值数目
		int i = 0;
		for (int group = 0; group <= n - 1; group ++) {
				
			denomination = sc.nextInt();
			numberOfCoinsOfTheDenomination = sc.nextInt();
			
			if (denomination >= amountOfMoney)
				maxNumberOfWeeks += numberOfCoinsOfTheDenomination;
			else {
				money[i] = new Money();
				money[i].denomination = denomination;
				money[i].numberOfCoinsOfTheDenomination = numberOfCoinsOfTheDenomination;
				i++;
			}
					
		}

		lengthOfArray = i;
		
	}
	
	
	public void calculateTheMaxWeeks() {
		
		quickSort(money, 0, lengthOfArray - 1);
		boolean tooMuch = false;
		while(true) {
			
			int max = 0;
			for (int i = lengthOfArray - 1; i >= 0; i --) {
				
				while (max < amountOfMoney && money[i].numberOfCoinsOfTheDenomination > 0 ) {
					max += money[i].denomination;
					money[i].numberOfCoinsOfTheDenomination --;
	
					if (max >= amountOfMoney)
						{tooMuch = true;}
				}	
				
				if (tooMuch) {
					
					max -= money[i].denomination;
					money[i].numberOfCoinsOfTheDenomination ++;
					tooMuch = false;
				}
				
			}
			
			boolean canPayHim = false;
			for (int i = 0; i <= lengthOfArray - 1; i ++) {
				if(money[i].numberOfCoinsOfTheDenomination > 0 && (max + money[i].denomination) >= amountOfMoney) {
				
					money[i].numberOfCoinsOfTheDenomination --;
					maxNumberOfWeeks ++;
					canPayHim = true;
					break;
				}
				
			}
		
			if (!canPayHim) 
				{return ;}
			
		}
		
	}
	

	
	
	private void quickSort(Money []money, int low, int high) {
		
		if (low < high) {
			int mid = quickPass(money, low, high);
			quickSort(money, low, mid - 1);
			quickSort(money, mid + 1, high);
		}
	}
	
	private int quickPass(Money []money, int low, int high) {
	
		Money theMidValue = money[low];
		
		while (low < high) {
			
			while (low < high && money[high].denomination >= theMidValue.denomination )
				high --;
			
			if (low < high) {
				money[low] = money[high];
				low ++;
			}
				
			while (low < high && money[low].denomination >= theMidValue.denomination )
				low ++;
			
			if (low < high) {
				money[high] = money[low];
				high --;
			}
			
		}
		
		int mid = low; //or mid = high;
		money[mid] = theMidValue;
		
		return mid;
	}
	
	
	public static void main(String []args) {
		
		Main solution = new Main();
		solution.input();
		solution.calculateTheMaxWeeks(); 
		System.out.print(solution.maxNumberOfWeeks);
	}
	
	public class Money {
		
		public int denomination;
		public int numberOfCoinsOfTheDenomination;
		
		public Money() {}
	}
	
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator