目录

一、题目

二、思路

1、当两个年份不一样的时候

(1)from年剩余之后的收益

(2)中间年份的全部收益

(3)to年有的收益

2、同一个年份

三、代码

详细注释版本:

简化注释版本:


一、题目

淘宝网店     题目链接:淘宝网店

NowCoder在淘宝上开了一家网店。他发现在月份为素数的时候,当月每天能赚1元;否则每天能赚2元。现在给你一段时间区间,请你帮他计算总收益有多少。

输入描述:
        输入包含多组数据。

每组数据包含两个日期from和to (2000-01-01 ≤ from ≤ to ≤ 2999-12-31)。

日期用三个正整数表示,用空格隔开:year month day。

输出描述:
        对应每一组数据,输出在给定的日期范围(包含开始和结束日期)内能赚多少钱。
输入
2000 1 1 2000 1 31
2000 2 1 2000 2 29
输出
62
29

二、思路

最主要的是计算两个日期之间的月份数以及判断素数的问题。

1、当两个年份不一样的时候

就有公式:

收益 = 2001年剩余之后的收益 + [2002,2021]全部收益 + 2022年有的收益

(1)from年剩余之后的收益

可以用 整年的收益 - 开始月日之前的收益。

因为每年就12个月,所以是素数的月份是固定的 :2、 3 、 5、 7、 11 。只有这5个月份是素数,每天挣一块钱。其他月份都是每天挣两块钱。

同时要注意闰年的问题:闰年的2月份会多一天,所以多挣两块钱。

(2)中间年份的全部收益

注意是闰年还是平年,计算整体收益。

(3)to年有的收益

to年有的收益,就是当前年月日之前的收益。

但是要判断月份是素数还是合数,进行运算。

最后整体相加即可。

2、同一个年份

在同一个年中,计算收益。

假设是 2001-4-5 到 2001-8-18 的收益。利用我们上面的方法函数进行计算。

三、代码

在实际写代码中还有很多地方是需要注意的(在代码注释中):

  • 月份是否是素数判断;
  • 闰年的处理;
  • 计算from之前的收益时,要注意传入参数 fromDa - 1 ;

两个主要方法:

  • yearSum(int y):计算整年的收益
  • beforeSum(int y,int m,int d):计算指定日期在本年的收益。(月日之前的收益)

详细注释版本:

import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:淘宝网店* User: WangWZ* Date: 2023-04-12* Time: 19:13*/
public class Main {//判断是否是闰年private static boolean isLeapYear(int y) {return ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0));}//判断当前月数是否是素数private static boolean isPrime(int m) {if(m == 2 || m == 3 || m == 5 || m == 7 || m == 11) {return true;} else {return false;}}//整年全部的收益private static int yearSum(int y) {//2、3、5、7、11是素数月,所以每天只挣一块钱//其他都是每天挣两块钱//最后再判断是否是闰年,是闰年就+1(2月多挣一天)int sum =  31 * 2 + 28 * 1 + 31 * 1 + 30 * 2 +31 * 1 + 30 * 2 + 31 * 1 + 31 * 2 +30 * 2 + 31 * 2 + 30 * 1 + 31 * 2;if(isLeapYear(y)) {sum += 1;}return sum;}//指定日期之前的收益private static int beforeSum(int y,int m,int d) {//要判断这个月是素数还是合数//从当前月份向前累加int sum = 0;//1.先加当前月的没有过完整个月的天数的收益if(isPrime(m)) {sum += d * 1;} else {sum += d * 2;}//2.循环判断之前过完的月份是否是素数,并进行收益累加//注意不能加当前月份,因为这个月还没过完m--;while(m > 0) {switch(m){case 1 :case 8: case 10: case 12:sum += 31 * 2;break;case 2 :sum += (isLeapYear(y)?29:28);break;case 3 :case 5: case 7:sum += 31 * 1;break;case 4: case 6: case 9:sum += 30 * 2;break;case 11:sum += 30 * 1;break;}m--;}return sum;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNextInt()) {int fromYear = scanner.nextInt();int fromMo = scanner.nextInt();int fromDa = scanner.nextInt();int toYear = scanner.nextInt();int toMo = scanner.nextInt();int toDa = scanner.nextInt();//总收益 = form剩余的收益 + 中间年份的收益 + to之前的收益//from剩余的收益 = fromYear的全部收益 - from之前的收益//这里注意://在算from之前的收益时,要 - 1。//因为fromDa这一天是我们要计算收益的,因此不能减掉。int n1 = yearSum(fromYear) - beforeSum(fromYear,fromMo,fromDa - 1);//中间年份的收益:循环加中间年分的收益int n2 = 0;for(int i = fromYear+1; i < toYear; i++) {n2 += yearSum(i);}//to之前的收益int n3 = beforeSum(toYear,toMo,toDa);//总收益sum//这里因为不管什么情况都要加上n1和n3,所以可以直接定义sum时候就加上//sum = n1 + n3;int sum = 0;if(fromYear == toYear) {sum = n1 + n3 - yearSum(fromYear);} else {sum = n1 + n2 + n3;}System.out.println(sum);}}
}

简化注释版本:

import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:淘宝网店* User: WangWZ* Date: 2023-04-12* Time: 19:13*/
public class Main {//判断是否是闰年private static boolean isLeapYear(int y) {return ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0));}//判断当前月数是否是素数private static boolean isPrime(int m) {if(m == 2 || m == 3 || m == 5 || m == 7 || m == 11) {return true;} else {return false;}}//整年全部的收益private static int yearSum(int y) {int sum =  31 * 2 + 28 * 1 + 31 * 1 + 30 * 2 +31 * 1 + 30 * 2 + 31 * 1 + 31 * 2 +30 * 2 + 31 * 2 + 30 * 1 + 31 * 2;if(isLeapYear(y)) {sum += 1;}return sum;}//指定日期之前的收益private static int beforeSum(int y,int m,int d) {int sum = 0;//1.先加当前月的没有过完整个月的天数的收益if(isPrime(m)) {sum += d * 1;} else {sum += d * 2;}//2.循环判断之前过完的月份是否是素数,并进行收益累加m--;while(m > 0) {switch(m){case 1 :case 8: case 10: case 12:sum += 31 * 2;break;case 2 :sum += (isLeapYear(y)?29:28);break;case 3 :case 5: case 7:sum += 31 * 1;break;case 4: case 6: case 9:sum += 30 * 2;break;case 11:sum += 30 * 1;break;}m--;}return sum;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNextInt()) {int fromYear = scanner.nextInt();int fromMo = scanner.nextInt();int fromDa = scanner.nextInt();int toYear = scanner.nextInt();int toMo = scanner.nextInt();int toDa = scanner.nextInt();//from剩余的收益 = fromYear的全部收益 - from之前的收益int n1 = yearSum(fromYear) - beforeSum(fromYear,fromMo,fromDa - 1);//中间年份的收益:循环加中间年分的收益int n2 = 0;for(int i = fromYear+1; i < toYear; i++) {n2 += yearSum(i);}//to之前的收益int n3 = beforeSum(toYear,toMo,toDa);//总收益sumint sum = 0;if(fromYear == toYear) {sum = n1 + n3 - yearSum(fromYear);} else {sum = n1 + n2 + n3;}System.out.println(sum);}}
}

《淘宝网店》:计算总收益相关推荐

  1. 每日一题01、02(斐波那契凤尾、淘宝网店、美国节日、分解因数)

    1.在OSI分层模型中,把传输的比特流划分为帧,是哪一层的功能(C) A 物理层 B 网络层 C 数据链路层 D 传输层 2.下面关于源端口地址和目标端口地址的描述中,正确的是(A) A 在TCP/U ...

  2. Day 32 淘宝网店+斐波那契凤尾

    目录 1.淘宝网店 2.斐波那契凤尾 1.淘宝网店 链接:淘宝网店__牛客网 来源:牛客网 [编程题]淘宝网店 热度指数:1556 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32 ...

  3. 我家的漫路超市——怎么开淘宝网店

    我家漫路超市开张啦!主营:零食.生活用品,网址http://manluu.taobao.com,欢迎光临啊!各位顺便帮我介绍给你们的朋友和同事,在此多谢啦! 虽然咱在IT领域也混了近十来年了,电子商务 ...

  4. 淘宝网店应该怎么样去做好宝贝SEO优化?

    淘宝网店应该怎么样去做好宝贝SEO优化?相信这一点,有点经验的淘宝店主都是很重视这一点的,淘宝店铺如果要做好,那淘宝SEO就非常有必要,因为自然流量对于店铺的长远发展来看是具有战略意义的.下面一鸣叫兽 ...

  5. 怎么开淘宝网店?淘宝网开店流程图解,淘宝开店教程!

    下面我把开店的流程简单的介绍下,方便以后想开店的朋友,希望可以帮有需要的亲! 开淘宝网店方面大家有什么不懂得可以联系我QQ 5 5 1 7 8 0 9 7 7 淘宝开店是很简单的.只要拿身份证开通网银 ...

  6. 分享下通过开淘宝网店挣钱的经验,更激励下大家积极向上的动力

    按理说,我们做IT的,应当靠技术吃饭,但每个人都有自己的特点,所以适合每个人挣钱的方式也不同,而且IT技术更新太快,说吃青春饭也不为过,我们总要为40岁乃至45岁以后考虑一下. 前几天看到有网友分享做 ...

  7. 新手开淘宝网店怎样一个月安全达到一钻

    新手开淘宝网店怎样一个月安全达到一钻 也不多说了,说下新手们都关心的问题,就是怎么让店有流量,流量怎么转化为成交?其实说实话为了把店流量搞上去,我是啥办法都使用过的,论坛里面说的那些有用的和没用的,偶 ...

  8. 淘宝网店数据包使用方法教学

    淘宝网店数据包应用教程... 淘宝助理民圆下载地点: 本站供给淘宝数据包,瑰宝描写部门图片均标有本站火印,如需应用无火印图片,请接洽正在线客服讨取. 注:署理没有得将无火印图片间接上传淘宝,必需制造署 ...

  9. 弘辽科技:新手开淘宝网店的七大攻略

    原标题<弘辽科技:新手开淘宝网店的七大攻略> 伴随着计算机信息化技术的发展,互联网经济欣欣向荣,电子商务的发展也越加的繁荣.自从淘宝店上线之后,受到了很多朋友们的喜欢,因为它改变了人们的生 ...

最新文章

  1. How to Use HTML5 FUll Screen API(怎样使用HTML5全屏接口)
  2. OpenStack环境搭建(三:Computer与Controller节点的安装及配置)
  3. Hibernate映射关系
  4. ES6 for...of循环
  5. Daily Report 2012/11/09 陈伯雄(step 9)
  6. mysql之存储引擎和文件配置
  7. bitset与取数凑数类问题
  8. 单链表的头插法和尾插法c语言实现
  9. 搜索引擎的竞价排名是怎样实现的?
  10. 深入谷歌开源项目【1】 - Camer2 - 环境搭建和源码编译
  11. 生成树的冗余与负载分担技术
  12. Firefox和Chrome浏览器导出书签
  13. Atiitt uke发展战略规划十三五规划纲要 attilax总结
  14. 迅投QMT量化交易系统介绍
  15. Presto架构和使用总结
  16. 从零开始编写minecraft光影包(7)基础水面绘制
  17. 什么是应用宝统一链接服务器,applink
  18. SQLite实现获取本机短信数据
  19. 离散数学常用符号TeX输入
  20. 基于协同过滤算法的电影推荐系统设计(二) - ALS算法详解

热门文章

  1. AndroidStudio 高频使用快捷键及使用技巧(gif图)
  2. 为什么很少有单片机机构?培训班一般多少费用?
  3. 【阿里云云计算工程师ACP认证】云计算工程师知识图谱
  4. 吉他编曲--如何“扒带”(下)
  5. 史上最强:NumPy 实现全部机器学习算法,代码超3万行!
  6. PhotoShop: PSD精准切图
  7. 蚂蚁金服区块链朱永春:蚂蚁金服业务新思路,用以往通用场景结合出新的解决方案...
  8. 【歪门邪道】Android页面上快速实现蒙层引导需求
  9. 机器人运动学---雅克比矩阵伪逆
  10. 笔记本电脑dns电脑服务器未响应如何处理,提示dns电脑服务器未响应如何处理?...