《淘宝网店》:计算总收益
目录
一、题目
二、思路
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、当两个年份不一样的时候 (1)from年剩余之后的收益 (2)中间年份的全部收益 (3)to年有的收益 2、同一个年份 三、代码 详细注释版本: 简化注释版本ÿ…...

2023年03月青少年软件编程C语言一级真题答案——持续更新.....
1.字符长方形 给定一个字符,用它构造一个长为4个字符,宽为3个字符的长方形,可以参考样例输出。 时间限制:1000 内存限制:65536 输入 输入只有一行, 包含一个字符。 输出 该字符构成的长方形,长4个字符,宽3个字符。 样例输入 * 样例输出 **** **** ****#include<bi…...

家用洗地机好用吗?好用的洗地机分享
洗地机是一种高效、节能、环保的清洁设备,广泛应用于各种场所的地面清洁工作。它不仅可以快速清洁地面,还可以有效去除污渍、油渍等难以清洁的污染物,让地面恢复光洁如新的状态。同时,洗地机还可以减少清洁人员的劳动强度…...
《分解因数》:质因数分解
目录 一、题目: 二、思路: 三、代码: 一、题目: 分解因数 《分解因数》题目链接 所谓因子分解,就是把给定的正整数a,分解成若干个素数的乘积,即 a a1 a2 a3 ... an,并且 1 < a1…...

(排序10)归并排序的外排序应用(文件排序)
TIPS 在一些文件操作函数当中,fputc与fgetc这两个函数都是针对字符的,如果说你需要往文件里面去放入整形啊等等,不是字符的类型,这时候就用fprintf,fscanf在参数里面数据类型控制一下就可以。但是话说回来,…...

浅谈根号分治与分块
文章目录 1. 根号分治哈希冲突 2. 线性分块引入教主的魔法[CQOI2011] 动态逆序对[国家集训队] 排队[HNOI2010] 弹飞绵羊蒲公英 1. 根号分治 哈希冲突 题目1 n n n 个数, m m m 次操作。操作 1 为修改某一个数的值,操作 2 为查询所有满足下标模 x x x …...

(OpenAI)ChatGPT注册登录常见问题错误代码及其解决方法
在使用 ChatGPT 的时候我们可能会碰到一些错误的代码,本文统一来介绍一下每一种错误以及解决方法。 错误代码1. 不能在当前国家使用 出现场景:一般在注册或登录的时候会出现。 原因:主要是ChatGPT检测到当前访问所在的地区不允许访问导致。 …...

MySQL主从复制、读写分离(MayCat2)实现数据同步
文章目录 1.MySQL主从复制原理。2.实现MySQL主从复制(一主两从)。3.基于MySQL一主两从配置,完成MySQL读写分离配置。(MyCat2) 1.MySQL主从复制原理。 MySQL主从复制是一个异步的复制过程,底层是基于Mysql数…...

Linux 云服务器好用吗?(解读Linux云服务器的特点优势)
如今,云计算越来越受欢迎,许多公司正在将业务转移到那里。企业向云过渡的主要原因是它提供的众多服务,包括安全和充足的存储、数据库、服务器和其他关键元素。 作为相对前|沿的技术之一,云建立在虚拟服务器上。Linux 服务器…...

研读Rust圣经解析——Rust learn-8(match,if-let简洁控制流,包管理)
研读Rust圣经解析——Rust learn-8(match,if-let简洁控制流,包管理) matchother和占位符_区别 easy matchenum matchno valuematch inner Option matchmore better way if-let整洁控制包管理模块(mod)拆分声明modpub公开use展开引用拆解模块结…...

G8期刊《全体育》期刊简介及投稿要求
G8期刊《全体育》期刊简介及投稿要求 《全体育》是由湖南体育产业集团有限公司主管、体坛传媒集团股份有限公司主办、中教体育 出版发行的体育综合性期刊。 主管:湖南体育产业集团有限公司 主办:体坛传媒集团股份有限公司 国内刊号:CN4…...

数据结构和算法学习记录——层序遍历(层次遍历)、二叉树遍历的应用(输出二叉树中的叶节点、求二叉树的高度、二元运算表达式树及其遍历、由两种遍历序列确定二叉树)
目录 层序遍历 思路图解 代码实现 二叉树遍历的应用 输出二叉树中的叶节点 代码实现 求二叉树的高度 思路图解 代码实现 二元运算表达式树及其遍历 由两种遍历序列确定二叉树 层序遍历 层序遍历可以通过一个队列来实现,其基本过程为: 先根…...

【Neo4j数据库】图数据库_Neo4j增加节点(关系)、查询、删除数据库等操作解析(Cypher语句)
【Neo4j数据库】图数据库_Neo4j增加节点(关系)、查询、删除操作解析(Cypher语句) 文章目录 【Neo4j数据库】图数据库_Neo4j增加节点(关系)、查询、删除操作解析(Cypher语句)1. 介绍2…...

Linux移动文件和文件夹(目录)命令
命令mv 英文move 翻译移动 mv命令可以移动文件或文件夹(目录),也可以重命令(覆盖)文件。 1. 移动文件/重命名 单纯地移动某一个文件直接使用: mv <源文件名称/地址> <新文件名称/地址>这个方法…...

Pandas的应用-5
Pandas是一个强大的数据处理库,它提供了高性能、易于使用的数据结构和数据分析工具。本文将介绍Pandas常用的数据结构和常用的数据分析技术,包括DataFrame的应用、窗口计算、相关性判定、Index的应用、范围索引、分类索引、多级索引以及日期时间索引。 …...

java继承类怎么写
继承类是通过把父类的方法和属性继承到一个类中,而子类的方法和属性是子类自己定义的。 Java中有一个很重要的概念叫做继承,这也是 Java语言的精髓所在。Java语言提供了一种机制,叫做派生类。在 Java中,如果没有实现了某个派生类方…...

面向对象程序设计
OOP 【面向对象程序设计】(OOP)与【面向过程程序设计】在思维方式上存在着很大的差别。【面向过程程序设计】中,算法是第一位的,数据结构是第二位的,这就明确地表述了程序员的工作方式。首先要确定如何操作数据&#…...

Linux 用户身份切换(su,sudo)
文章目录 Linux 用户身份切换su使用案例 sudo使用案例 visudo与/etc/sudoers单一用户可使用root所有命令,与sudoers文件语法利用wheel用户组以免密码的功能处理visudo有限制的命令操作通过别名创建visudosudo的时间间隔问题sudo搭配su的使用方式 Linux 用户身份切换…...

求倒置数问题
文章目录 求倒置数程序设计程序分析求倒置数 【问题描述】数组A【0,…,n-1】是一个n个不同整数数构成的数组。如果i<j,但是A[i]〉A[j],则这对元素(A[i],A[j])被称为一个倒置(inversion)。设计一个O(nlogn)算法来计算数组中的倒置数量 【输入形式】输入两行,第一行…...

sed(学习)
1、清除环境变量 profile~/.bash_profile sed -i s#export LD_LIBRARY_PATH.*##g $profile 2、设置环境变量(替换值) sed -i s#export LD_LIBRARY_PATH.*#export LD_LIBRARY_PATH/opt/testlinux/lib#g ~/.bash_profile 3、修改配置文件 sdk_dir/root/test log_dir/…...

B - GCD Subtraction
文章目录 AtCoder Regular Contest 159B - GCD Subtraction AtCoder Regular Contest 159 B - GCD Subtraction 问题:每次A,B都减去gcd(A,B),求其中一个减到0至少需要多少次主要思路: 首先第一步应该想到每次减去的数,先减去的数…...

解决Failed to load ApplicationContext问题的思路
中文翻译: 加载ApplicationContext失败 第一步:首先检查测试类的注解 以及 依赖 SpringBootTest <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scop…...

基于CAMX大气臭氧来源解析模拟与臭氧成因分析实践技术应用
查看原文>>>基于CAMX大气臭氧来源解析模拟与臭氧成因分析实践技术应用 目录 专题一、大气臭氧污染来源及成因分析技术讲解;CAMx模式初识及臭氧来源解析模拟本地案例配置说明 专题二、CAMx模式编译安装及空气质量模拟案例配置 专题三、CAMx扩展和探测工…...

异常的讲解 (1)
目录 异常入门的案例 异常介绍 基本概念 异常的小结 常见的运行时异常 1.NullPointerException空指针异常 2.ArithmeticException数学运算异常 3.ArraylndexOutOfBoundsException数组下标越界异常 4.ClassCastException类型转换异常 5.NumberFormatException数字格式不…...

Prometheus - Grafana 监控 MySQLD Linux服务器 demo版
目录 首先是下载Prometheus 下载和安装 配置Prometheus 查看监控数据 监控mysql demo 部署 mysqld_exporter 组件 配置 Prometheus 获取监控数据 -------------------------------------- 安装和使用Grafana 启动Grafana -------------------------------------- 配…...

应届生,实力已超6年,太卷了!
你好,我是田哥 今晚上,给一位朋友做模拟面试,原本说好的90分钟左右,结果整了2个多小时。 很多人估计也很好奇,我们这两个多小时聊聊什么,下面我给大致总结一下: 面试技巧 面试中,我们…...

0-1背包问题
文章目录 0-1背包问题JavaPython0-1背包问题 【问题描述】 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 【输入形式】 第一行输入物品的个数n和背包容量C。 第二行输入每个物品的价值v[i…...

VUE前端项目环境搭建
背景: 想要使用vue搭建一个前端项目,写个小网站练练手,因为没有前端经验,所以从网上找了一个vue得开源模板使用,经过一番挑选选中了字节公司花裤衩大佬开源得项目,地址如下: 开源项目地址&…...

VMware安装Win2000安装程序闪退重启等问题的解决方法
VMware安装Win2000安装程序闪退重启等问题的解决方法 【症状】 1、比较新的VMware版本如16.2.5,Win2000安装时,安装程序在安装Distributed Transaction Coordinator时闪退重启 2、比较新的VMware版本如17.0.1,还会发生显示跳跃性卡顿的现象…...

【id:45】【20分】A. Equation(类与对象+构造)
题目描述 建立一个类Equation,表达方程ax2bxc0。类中至少包含以下方法: 1、无参构造(abc默认值为1.0、1.0、0)与有参构造函数,用于初始化a、b、c的值; 2、set方法,用于修改a、b、c的值 3、ge…...