1、小蓝吃糖果
1)题目
小蓝有 n 种糖果,每种数量已知。
小蓝不喜欢连续 2 次吃同样的糖果。问有没有可行的吃糖方案。
输入格式:
第一行是整数 n(0<n<1000000)。
第二行包含 n 个数,表示 n 种糖果的数量 mi,0<mi<1000000。
输出格式:
输出一行,包含一个 Yes 或No。
输入样例:
在这里给出一组输入。例如:
3 4 1 1
输出样例:
在这里给出相应的输出。例如:
No
2)题目解读
题目要求我们在第一行输入n个数,表示有n种糖果,然后在第二行输入n个数,分别表示这n种糖果的数量。然后这n种糖果不可以连续 2 次吃同样的糖果,问有没有可行的方法把所有糖果全部吃完的方法。我们可以很简单的知道数量最多的糖果最难吃完,因为吃完它需要很多其他糖果的帮助,不然就连续2次吃了相同的糖果,就不符合题意了。所有得出
除去数量最多的糖果总和>=最多糖果的数量 即可
3)代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[] arr=new int[n]; long sum=0; for (int i=0;i<n;i++){ arr[i]=sc.nextInt(); } Arrays.sort(arr); for (int i=0;i<n-1;i++){ sum+=arr[i]; } if (sum>=arr[n-1]){ System.out.println("Yes"); }else { System.out.println("No"); } }}
2你究竟有几个好姐妹
1)题目
小李的QQ列表里有很多联系人,他修改了所有人的备注姓名。其中有些联系人名字的前部或后部被加了诸如"好妹妹"的字样。请你打印出小李的所有的女性"好妹妹"。打印时请按照联系人原始名字升序排列,如果两人名字相同则年龄小的排在前面;如果两人年龄相同,则较早成为好友的排在前面。题目保证好妹妹标志不会同时出现在前缀和后缀,同一天里也不会添加名字相同并且年龄相同的"好妹妹"。
输入格式:
第一行给出标识好妹妹标志的字符串,该字符串内不包含空格,最大长度为6并且不区分大小写。第二行给出QQ列表的所有联系人个数n (1≤ n ≤105),随后n行列出所有联系人信息,每行信息格式如下:
备注姓名 性别 年龄 结交好友日期
其中备注姓名不超过30个字符;性别用字符表示,F表示女性,M代表男性;结交好友日期采用诸如"2001.01.01"的格式表示。
输出格式:
第一行输出好妹妹的数目k,随后k行打印出去掉好妹妹标志的名字、年龄以及结交好友日期。
输入样例:
hmm 10 Zoehmm F 28 2001.01.01 hmmBeith F 18 2010.10.21 Zack M 35 1999.09.18 hmmAdam F 21 2010.10.21 Beithhmm F 21 2010.10.21 Chelse F 45 2005.12.03 DaisyHMM F 30 2008.08.05 Eston M 18 2015.03.04 hmmFrany F 8 2018.07.15 JackHM F 7 2017.09.11
输出样例:
输出:
6 Adam 21 2010.10.21 Beith 18 2010.10.21 Beith 21 2010.10.21 Daisy 30 2008.08.05 Frany 8 2018.07.15 Zoe 28 2001.01.01
2)题目解读
题目要求我们找出有好妹妹的标记的人,并且打印时 按照联系人原始名字升序排列,如果两人名字相同则年龄小的排在前面;如果两人年龄相同,则较早成为好友的排在前面。并且要注意题目保证好妹妹标志不会同时出现在前缀和后缀,同一天里也不会添加名字相同并且年龄相同的"好妹妹"。
好妹妹标志的字符串,不区分大小写。
3)代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; //创建一个类来存储输入的数据 class Friend { String name; int age; String year; String month; String day; public Friend(String n,int a,String y,String m,String d){ name = n; age = a; year = y; month = m; day = d; } @Override //重写toString方法,方便后面结果的输出 public String toString(){ return name+" "+age+" "+year+"."+month+"."+day; } } //创建Friend_cmp类并实现Comparator接口,去重写compare方法, //后面使用sort方法以便可以传递一个比较器,去进行排序 class Friend_cmp implements Comparator<Friend>{ public int compare(Friend o1, Friend o2) { //1、先进行姓名比较 if(o1.name.equals(o2.name)){ //2、再进行年龄比较 if(o1.age==o2.age){ //3、最后进行认识时间的比较 if(o1.year.equals(o2.year)){ if(o1.month.equals(o2.month)){ int day1 = Integer.parseInt(o1.day); int day2 = Integer.parseInt(o2.day); return day1-day2; }else{ int month1 = Integer.parseInt(o1.month); int month2 = Integer.parseInt(o2.month); return month1-month2; } }else{ int year1 = Integer.parseInt(o1.year); int year2 = Integer.parseInt(o2.year); return year1-year2; } }else{ return o1.age-o2.age; } }else{ return o1.name.compareTo(o2.name); } } } public class Main { public static void main(String[] args) throws IOException { //数据量过大,使用字符流输入 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String hmm_flag = br.readLine().toUpperCase(); int n = Integer.parseInt(br.readLine()); //创建friend数组储存数据 Friend friend[]=new Friend[n]; int index =0;//记录有多少个好妹妹 for(int i=0;i<n;i++){ //输入 String str = br.readLine(); String[] split = str.split(" "); String mark_nm = split[0].toUpperCase(); //判断是不是女人并且有没有好妹妹标志 if(split[1].equals("F") && mark_nm.contains(hmm_flag)){ String date[]=split[3].split("\\."); //如果字符串前面有好妹妹标志 if(mark_nm.startsWith(hmm_flag)){ friend[index++]=new Friend(split[0].substring(hmm_flag.length(), split[0].length()), Integer.parseInt(split[2]), date[0], date[1], date[2]); } //如果后面有好妹妹标志 if(mark_nm.endsWith(hmm_flag)){ friend[index++]=new Friend(split[0].substring(0, split[0].length()-hmm_flag.length()), Integer.parseInt(split[2]), date[0],date[1],date[2]); } } } System.out.println(index); //使用sort并且传Friend_cmp()比较器进行比较 Arrays.sort(friend,0,index,new Friend_cmp()); for(int i=0;i<index;i++){ //重写toString方法进行输出 System.out.println(friend[i].toString()); } } }