1.3 容器装水溢出问题

题目描述

      N个X升容器分层叠放(即放N层),从上到下,编号分别从为从1到N。如果某个容器里装的水超过X升,则会溢出流到下层容器。
      已知N个容器中已经分别装有若干升水,从最下层开始往上,每层导入若干升水,最终有多少升水会溢出到所有容器之外?
      已知N<=10000,X<=1000。每个容器中倒入的水不超过10000升。

输入描述

第一行:两个数字N X
第二行开始共N行,每行两个数字。分别为容器I中原有多少升水,以及往容器I中倒入了多少升水。第n行数据对应的容器编号为n-1。

输出描述

溢出了多少升水。

示例

输入:

10 10
0 9962
1 2642
7 8773
9 523
6 3882
7 1093
0 3933
7 2276
6 4792
6 8904

输出:

46729

实现代码

import java.util.Scanner;

public class Test01 {
	public static void main(String[] args){
		//1. 接收数据n, x
		int n, x;
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();
		x = scan.nextInt();
		
		//2.定义一些数据
		int out = 0;	//总共溢出的水
		int down_empty = 0; //下层总共可容纳多少升水
		
		//3. 接收每一层数据
		int[] arr = new int[10000];
		for(int i=0; i<n; i++){
			int have = scan.nextInt();
			int put = scan.nextInt();
			arr[i] = have + put;
		}
		/*
		for(int i=0; i<n; i++){
			System.out.println(arr[i]);
		}
		*/
		//4.从第N层(最底层)模拟倒水操作
		for(int i=n-1; i>=0; i--){
			//到入水后不会溢出,即 arr[i] <= x+down_empty, 则更新down_empty
			if(arr[i] <= (x + down_empty)){
				down_empty += (x-arr[i]);
			}else{
				out += arr[i] - (x+down_empty);
				down_empty = 0;
			}
		}
		//5. 输出结果
		System.out.println(out);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值