刷题之小蓝吃糖果和你究竟有几个好姐妹

简介: 刷题之小蓝吃糖果和你究竟有几个好姐妹

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



目录
相关文章
|
1月前
|
算法
AcWing 1343. 挤牛奶(每日一题)
AcWing 1343. 挤牛奶(每日一题)
|
1月前
|
算法
AcWing 1355. 母亲的牛奶(每日一题)
AcWing 1355. 母亲的牛奶(每日一题)
|
6月前
切面条(蓝桥杯)
切面条(蓝桥杯)
|
6月前
青蛙的约会—POJ1061
青蛙的约会—POJ1061
|
6月前
|
存储 算法
从0备战蓝桥杯:找出只出现一次的数字,数单身狗
从0备战蓝桥杯:找出只出现一次的数字,数单身狗
65 0
从0备战蓝桥杯:找出只出现一次的数字,数单身狗
|
算法 Cloud Native
【刷题日记】875. 爱吃香蕉的珂珂
本次刷题日记的第 57 篇,力扣题为:875. 爱吃香蕉的珂珂,中等
146 0
【刷题日记】875. 爱吃香蕉的珂珂
|
测试技术 C++ Python
糖果-蓝桥杯19省赛
糖果-蓝桥杯19省赛
105 0
【每日一道智力题】之猴子搬香蕉
【每日一道智力题】之猴子搬香蕉
408 0
|
算法 C++ Python
每日算法系列【LeetCode 875】爱吃香蕉的珂珂
每日算法系列【LeetCode 875】爱吃香蕉的珂珂
105 0