洛谷:P1085 [NOIP2004 普及组] 不高兴的津津 JAVA

题目描述

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

输入格式

输入包括 7 行数据,分别表示周一到周日的日程安排。每行包括两个小于 10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

输出格式

一个数字。如果不会不高兴则输出 0,如果会则输出最不高兴的是周几(用 1, 2, 3, 4, 5, 6, 7 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

输入输出样例

输入 #1复制

5 3
6 2
7 2
5 3
5 4
0 4
0 6

输出 #1复制

3

思路:

法一:(最简单也最推荐)

代码不难理解所以不多解释了

package 分支结构;

import java.util.Scanner;

public class P1085_second {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int sum, max = 0,day = 0;
		for(int i=0;i<7;i++) {
			int schoolIn = sc.nextInt();
			int schoolOut = sc.nextInt();
			sum = schoolIn + schoolOut;
			if(sum > max) { 
				max = sum;
				day = i + 1;
			}
            //当sum=max的时候不做任何操作
            //所以不用再对条件“如果有两天或两天以上不高兴的程度相当,
            //则输出时间最靠前的一天。”进行操作了
		}
		if(max > 8)  //这是一个仔细审题的坑,输出中明确说了“如果不会不高兴则输出 0”
			System.out.println(day);
		else
			System.out.println(0);
	}

}

法二:

我自己写的,代码又长又复杂,可以不看

大概思路就是:

使用两个二维数组arr和arr2,arr数组用来记录输入的数据,arr2数组的arr2[i][0]用来记录每天的总学习时长,arr2[i][1]是标记位,标记这天是否为学习时间最长的那天。

其中,arr2[i][0] = arr[i][0] + arr[i][1]

使用max记录下最长的学习时间,然后用max跟所有的arr2[i][0]进行比较,如果相等,标志位就附1(对应代码 arr2[i][1] = 1)

最后输出的时候如果max>8,就看标志位,只要标志位为1就输出并结束循环

如果max<=8,直接输出0.

package 分支结构;

import java.util.Scanner;

public class P1085 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int[][] arr=new int[7][2];
		int[][] arr2=new int[7][2];
		int max = 0;
		
		for(int i=0;i<7;i++) {//循环输入
			for(int j=0;j<2;j++) {
				arr[i][j] = sc.nextInt();
			}
			arr2[i][0]=arr[i][0]+arr[i][1];//总学习时间用arr2[i][0]记录下来
		}
		
		//找出最长的学习时间
		for(int i=0;i<6;i++) { 
			if(arr2[i][0] > max) {
				max=arr2[i][0];
				}
		}
		if(max > 8) {
			//学习时间最长的会被标记 1
			for(int i=0;i<6;i++)
				if(arr2[i][0]==max) {
					arr2[i][1]=1;
				}
			
			//顺序判断,只要找到标记 1 的就是时间靠前的学习时间最长的那天
			for(int i=0;i<7;i++) {
				if(arr2[i][1]==1) {
					System.out.println(i+1);
					break;//找到就退出循环
				}
			}
		}else{
			System.out.println(0);
		}
	}
}

反思

仔细审题。忽略了题目中的“但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。” 和 “如果不会不高兴则输出 0”。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值