每日一题 4-27

在Java中,以下关于方法重载和方法重写描述正确的是?
A 方法重载和方法的重写实现的功能相同
B 方法重载出现在父子关系中,方法重写是在同一类中
C 方法重载的返回值类型必须一致,参数项必须不同
D 方法重写的返回值类型必须相同或相容。
解析: D
重载 : 方法名一致,形参列表不同。无所谓返回值多少,不作为判断依据。
重写:两同,两小,一大。 方法名和形参列表相同,子类的返回值类型和异常类型必须是父类对应的类型或者其字类型,子类的访问权限必须大于父类。

题目1:计算日期到天数转换

import java.util.Scanner;
public  class  Main{
     public static void main(String[] args) {
         Scanner  sc=  new Scanner(System.in);
         while (sc.hasNext()){
             int y= sc.nextInt();
             int m = sc.nextInt();
             int d = sc.nextInt();
             int sum = 0;
             int [] day  = {31,59,90,120,151,181,212,243,273,304,334,365};
             if (m>=2){
                 sum += day[m-2];
             }
           sum += d;
             if (m>2){
                 if (y%400==0 || y%4==0&&y%100!=0){
                      sum += 1;
                 }
             }
             System.out.println(sum);
         }
     }
 }

题目2:幸运袋子

  1. 递归+回溯
    解题思路
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner  sc =  new Scanner(System.in);
        while (sc.hasNext()){
            int n =  sc.nextInt();
            int[] a  =  new int[n];
            for (int i = 0; i <n ; i++) {
                a[i] = sc.nextInt();
            }
            Arrays.sort(a);
            int num = count(a,n,0,0,1);
            System.out.println(num);
        }

    }

    private static int count(int[] a, int n, int pos, int sum, int multi) {
        int count = 0;
        for (int i = pos; i <n ; i++) {
            sum  += a[i];
            multi *= a[i];
            if (sum > multi){
                count = count +1 + count(a,n,i+1,sum,multi);
            }else if (a[i]==1){
                count = count  + count(a,n,i+1,sum,multi);
            }else {
                break;
            }
            sum = sum -a[i];
            multi = multi/a[i];
            while (i<n-1 && a[i]==a[i+1]){
                i++;
            }
        }
        return  count;
    }
}

总结:
1.将袋子里面球的号码排序
2.当一个号码和前面的号码无法组成幸运袋子,那就直接break,因为后面的号码肯定比前面号码数字大或者等于,也无法构成幸运的袋子
3.当我们返回上层递归的时候,需要回溯,继续计算前面的号码和当前位置后面的号码是否可以构成幸运的袋子
特殊情况 a[i] == 1 1和任何数都大于它和他的乘积

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值