【Java版oj】day14计算日期到天数转换、幸运的袋子
创始人
2025-05-31 16:11:16
0

目录

 一、计算日期到天数转换

(1)原题再现

(2)问题分析

(3)完整代码

 二、幸运的袋子

(1)原题再现

(2)问题分析

(3)完整代码


 一、计算日期到天数转换

(1)原题再现

计算日期到天数转换_牛客题霸_牛客网

描述

根据输入的日期,计算是这一年的第几天。

保证年份为4位数且日期合法。

进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(1)\O(1) 

输入描述:

输入一行,每行空格分割,分别是年,月,日

输出描述:

输出是这一年的第几天

示例1

输入:

2012 12 3

输出:

366

示例2

输入:

1982 3 4

输出:

63

(2)问题分析

        这道题很简单。首先需要定义一个判断是否为闰年的函数,闰年是能整除400或者能够整除4却不能整除100的数。其次闰年的二月是29天。

        这题有个关键的是划分输入的一串字符,将它划分成年月日,然后将String类型转换成Int类型。首先我们不能用String类的subString方法,因为月份的下标是不确定的,如果是两位数,下标就是(5,7)(左闭右开),如果是一位数就变成了(5,6),所以我们使用快慢指针法,当快指针指向空格时,我们记录从慢指针到快指针的一个字符串。将String类型转换成Int类型,我们可以使用Integer.praseInt(str)方法或者Integer.valueOf(str)方法

(3)完整代码

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String date = sc.nextLine();int slow = 0;int fast = 1;String []str = date.split(" ", 3);String year = str[0];String month = str[1];String day = str[2];int ans = count(year, month, day);System.out.println(ans);}public static boolean isLeapYear(String year) {int year1 = Integer.parseInt(year);return year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0);}public static int chooseMonth(String year, int month) {int m = 0;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:m = 31;break;case 2:if (isLeapYear(year)) {m = 29;} else {m = 28;}break;default:m = 30;}return m;}public static int count(String year, String month, String day) {int year1 = Integer.parseInt(year);int month1 = Integer.parseInt(month);int day1 = Integer.parseInt(day);int sum = 0;if (month1 == 1) {return day1;} else {for (int i = 1; i < month1; i++) {sum += chooseMonth(year, i);}sum += day1;return sum;}}
}

 二、幸运的袋子

(1)原题再现

幸运的袋子__牛客网

        一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
        你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。

输入描述:

第一行输入一个正整数n(n ≤ 1000)

第二行为n个数正整数xi(xi ≤ 1000)

输出描述:

输出可以产生的幸运的袋子数

示例1

输入

3

1 1 1

输出

2

 

(2)问题分析

        这道题是有点难度的。需要用到数论+DFS深度优先搜索+搜索剪枝+回溯等方法。

        数论对于任意两个正整数x,y,如果要满足x+y>x*y,则必须有一个数为1。

证明:

推广到任意i个正整数,序列中必须有1才可能满足+>*的可能,否则必然不是这样的幸运袋子

所以我们可以现将序列按照升序排序,然后分两种情况:一种是序列中没有1的情况,直接打印0,另一种是序列中有1的情况,使用DFS算法计算。

        搜索剪枝:如果不进行剪枝,那么使用DFS遍历搜索会超出时间限制。剪枝的依据:如果选择一个数num能使add+num>mul*num,即满足题目要求,就继续往下搜索;如果add+num<=mul*num,即不满足题目要求,因为序列是按照升序排序的,所以也不需要往后继续添加num了,必然不符合题目要求,这时我们就可以进行剪枝,跳出这一次的循环。根据题目要求,编号一样的球没有任何区别,所以我们还要进行去重操作,比对这一位置和下一位置是否相同,相同就直接跳过这个位置的处理即可。

        回溯:一组情况处理完毕了,我们需要将其结果删去,在进行下一组操作。比如,序列[1,1,2,3,4]当我们选择1,1,2,3,4时,不满足幸运袋子的要求,我们回退上一层选择的1,1,2,3,这组序列满足题目要求,此时假定位置3的情况已经全部列完了,我们就需要删除位置3的数即add(1+1+2+3-3),mul(1*1*2*3/3),然后添加位置4看看是否符合题意,add(1+1+2+4),mul(1*1*2*4)。

 

(3)完整代码

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int []num = new int[n];for (int i = 0; i < n; i++) {num[i] = sc.nextInt();}Arrays.sort(num);if(num[0]==1){int ans = DFS(num, n, 1, 1, 1);System.out.println(ans);}else{System.out.println(0);}}public static int DFS(int []num, int n, int index, int add, int mul) {int count = 0;for (int i = index; i < n; i++) {add += num[i];mul *= num[i];if (add > mul) {count += 1 + DFS(num, n, i + 1, add, mul);}else {break;}add -= num[i];mul /= num[i];while (i < n - 1 && num[i] == num[i + 1]) {i++;}}return count;}
}


相关内容

热门资讯

常熟人吃鱼的108种姿势:从科... 一条鲤鱼游出的千年文化密码 当苏州少年金耀星在天津全国烹饪大赛上,用迷你版果汁松鼠桂鱼斩获特金奖时,...
旅游还有哪些不开心的事 旅游中的“闹心”事儿,你遇到过几件? 旅游,本是一场逃离日常琐碎,奔赴诗和远方的美好旅程。然而,现...
陕西金延安端午文旅盛宴点燃文化... 又是一年端阳到,龙舟竞渡粽香飘。节日期间,陕西省延安市金延安旅游度假区将红色演艺与主题教育相结合,精...
去四川旅游攻略旅游团五日游要花... 标题:【我的四川五日游亲测报告:跟着本地导游乐乐玩转四川,花费竟如此实惠!】 四川旅游推荐!当地导游...
全球农创客训练营走进云南以“咖... 央广网北京6月2日消息(记者韩雪莹)据中央广播电视总台中国之声《新闻纵横》报道,一杯咖啡,可以让人头...
15道 旺销特色菜,创意融合 藜蒿炒腊肉 原料: 腊肉(肥三瘦七)300克,鄱阳湖藜蒿300克,韭菜段150克,盐、红辣椒段、蒜...
家里有个会做饭的男人太幸福了,... 姐妹们!你们知道家里有个会做饭的老公是什么体验吗?那就是——每天下班回家都能吃到热腾腾的饭菜,关键还...
原创 5... 姐妹们,今天给你们分享个我家每周必吃的省钱神菜—— 酸辣土豆丝!成本不到5块钱,10分钟出锅,每次炒...
原创 半... 朋友们,今天教你们一个偷懒都能被夸厨神的神仙做法! 只要电饭锅会煮饭,你就能做出甜到粘嘴唇的照烧五花...
原创 R... 曾经风头无两的韩国超级偶像Rain与他的妻子金泰熙已经携手走过七个年头,虽然外界对他们婚后生活的报道...
“龙腾端午·梧现精彩”非遗好市... 6月1日,由梧州市文化广电体育和旅游局主办的“龙腾端午·梧现精彩”非遗好市在梧州市西堤公园持续开展。...
上海海派旗袍文化节开幕,推出3... 静态展览,动态走秀,互动体验……6月1日,“旗韵绽芳华”——6·6上海海派旗袍文化节在张园拉开帷幕。...
华程国旅推出“欧洲循环巴士游” 英国当地时间5月27日下午,华程国旅集团TRIP2EU“欧洲循环巴士游”发布会伦敦站在伦敦千禧酒店举...
原创 6... “来来来,尝尝我们厂的窑鸡,特意给你加的菜!”何家劲笑容满面,将一整盘热腾腾的窑鸡推到黄日华面前。 ...
原创 以... #优质好文激励计划# “以前人人爱吃的小龙虾,为啥现在不火了?内行:4个原因很难改变” 家人们,谁...
吉木萨尔县第三届厦吉文化美食汇... 5月31日,为期3天的“百味醉天山 闽疆共飨宴”昌吉州旅游文化美食节系列活动之吉木萨尔县第三届厦吉文...
去四川旅游攻略当地团五天四晚要... 标题:去四川旅游攻略当地团五天四晚要花多少钱,驴友亲测!跟着乐乐玩转四川 四川旅游推荐!当地导游-乐...
上海迪士尼游客打架,属地部门:... 上海市公安局浦东分局官方微博6月1日消息,5月31日18时许,浦东公安分局接报警称迪士尼乐园内有人打...
“去中国要带空箱子!”在国外传... 随着“中国游”的便利性和吸引力不断上升,游在中国、购在中国成为越来越多国际游客的新选择 。 最近,“...
重庆家常美食菜谱,地道风味,轻... 重庆家常美味菜谱是一本介绍重庆地道美食的烹饪书籍,本书通过简单易懂的方式,呈现地道的重庆风味菜肴,读...