目录
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());
}
}
}