每日一题参数解析,跳石板(go),日期到天数转换,幸运的袋子

参数解析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import java.util.*;
public class Main{
    public static void main(String[] args) throws IOException{
      Scanner sc=new Scanner(System.in);
        String s=sc.nextLine();
//         int count=0;
//         for(int i=0;i<s.length();i++){
//             if(s.charAt(i)==' '){
//                 count++;
//             }
//            if(s.charAt(i)=='"'){
//            do{
//            count++;
//               }while(s.charAt(i)!='"');
//             }
//         }
//             System.out.println(count+1);
//         int flag=1;//第一个双引号出现的时候flag变为零,等遇到第二个双引号的时候,flag1
//         for(int i=0;i<s.length();i++){
//             if(s.charAt(i)!=' '&&s.charAt(i)!='"'){
//                 System.out.print(s.charAt(i));
//             }
//             if(s.charAt(i)=='"'){
//                 flag=flag^1;
//             }
//             if(s.charAt(i)==' '&&flag==0){
//                  System.out.println(s.charAt(i));
//             }
//             if(s.charAt(i)==' '&&flag==1){
//                 System.out.println();
//             }
//         }
        String[]arr=s.split(" ");
        System.out.println(arr.length);
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
}

日期—>天数转换

在这里插入图片描述
涉及闰年
闰年:
(1)十年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年。
(2)每四百年再一闰:如果year能够被400整除,则year是闰年。

public class Main {
    public static void main(String[] args) throws IOException {
         Scanner sc = new Scanner(System.in) ;
         while(sc.hasNext()){
            int year = sc.nextInt() ;
            int month = sc.nextInt() ;
            int day = sc.nextInt() ;
            int Day = getDay(year, month, day) ;
            System.out.println(Day);
        }
    }
    public static int getDay(int year,int month,int day){
        
        int [] Day = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} ;
        if((year%4==0&&year%100!=0)||year%400==0){
            Day[1]=29;
        }
        int sum=0;
        for(int i=0;i<month-1;i++){
            sum=sum+Day[i];
        }
        return sum+day;
        
    }
}

幸运的袋子

在这里插入图片描述

思路
将球按标号升序排序。每次从小到大选择,当选择到a1,a2,…,ak-1时满足给定条件,而再增加选择ak
时不满足条件(ak必然大于等于max(a1,a2,…,ak-1)),继续向后选择更大的数,必然无法满足!此时不必再继续向后搜索。如果有多个1,即当k=1时,sum(1)>pi(1)不满足,但下一个元素仍为1,则可以满足
1+1>1*1, 所以要判断当前ak是否等于1,如果等于1,虽然不能满足,组合的个数不能增加,但是继续向后搜索,仍然有满足条件的可能.对于重复数字,组合只能算一个,要去重。

import java.util.*;
public class Main{
    public static void main(String[]args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
        int n = sc.nextInt();
        int[] arr = new int[n];
        for(int i = 0;i < n;i++){
            arr[i] = sc.nextInt();
        }
     Arrays.sort(arr);           
        System.out.println(find(arr, 0, 0, 1));
        }
    }
    private static int find(int[] arr,int index,long sum,long multi){
        int count = 0;
        for(int i = index;i < arr.length;i++){
            sum += arr[i];
            multi *= arr[i];
             
            if(sum > multi){
                count = count + 1 + find(arr, i+1, sum, multi);
            }
            else if (arr[i] == 1) {
                //处理待判断的序列第一个数为1的时候,
                //那个1虽然不满足和大于积,但是要保留,继续往下考虑
                count = count + find(arr, i+1, sum, multi);
            }
            else {
                break;
            }
            sum -= arr[i];        //sum和multi在下一循环中还会用到
            multi /= arr[i];
            for(;i < arr.length-1 && arr[i] == arr[i+1];i++){
            //    i++;            //拥有相同号码的球是无区别的,因此跳过
            }
        }
        return count;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值