【Java版oj】day32淘宝网店、斐波那契凤尾

news2024/9/20 15:00:33

目录

 一、淘宝网店

(1)原题再现

(2)问题分析

(3)完整代码

 二、斐波那契凤尾

(1)原题再现

(2)问题分析

(3)完整代码


 一、淘宝网店

(1)原题再现

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

 

输入描述:

输入包含多组数据。 每组数据包含两个日期from和to (2000-01-01 ≤ from ≤ to ≤ 2999-12-31)。 日期用三个正整数表示,用空格隔开:year month day。

输出描述:

对应每一组数据,输出在给定的日期范围(包含开始和结束日期)内能赚多少钱。

 

示例1

输入

2000 1 1 2000 1 31

2000 2 1 2000 2 29

输出

62

29

(2)问题分析

           这道题我的思路是这样的:首先开始年和结束年不一定是一个完整的年。所以我们需要把开始年和结束年单独剔除计算。

        对于开始年和结束年这种可能不是完整的一年,我们还需要判断是不是同一个月,如果是同一个月,就用结束日减去开始日则算出天数;如果不是同一个月则把开始月和结束月单独计算。开始月是用这个的总天数减去开始月的日期,结束月就是结束月的日期。

        中间完整的一年,判断每一年是否闰年,如果是闰年,就计算1月1日到12月31日这段时间的收益。

        代码中有详细标注,这道题就是写起来有点费时,但是难度不大。

(3)完整代码

import java.util.*;

/*
 * 淘宝网店
 */
public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNextInt()) {
			int fromYear=sc.nextInt();
			int fromMonth=sc.nextInt();
			int fromDay=sc.nextInt();
			int toYear=sc.nextInt();
			int toMonth=sc.nextInt();
			int toDay=sc.nextInt();
			
			Set<Integer>set=new HashSet<>();//添加素数方便查找
			set.add(2);set.add(3);set.add(5);
			set.add(7);set.add(11);
			int money=0;
			int day=0;
			if(fromYear==toYear) {
				if(fromMonth==toMonth) {
					money=sameMonth(fromDay, fromMonth, fromYear, toDay, toMonth, toYear, set);
				}else {
					money=sameYear(fromDay, fromMonth, fromYear, toDay, toMonth, toYear, set);
				}
			}else {//不同年
				money+=sameYear(fromDay, fromMonth, fromYear, 31, 12, fromYear, set);//第一年
				money+=sameYear(1, 1, toYear, toDay, toMonth, toYear, set);//最后一年
				int temp=fromYear+1;
				while( temp<toYear){
					money+=sameYear(1, 1, temp, 31, 12, temp, set);
					temp++;
				}
				
			}
			System.out.println(money);
			
		}
	}
	//是否是闰年
	public static boolean isLeapYear(int year) {
		return (year%4==0&&year%100!=0)||year%400==0;
	}
//计算某个月多少天
	public static int manyDay(int year,int month) {
		switch(month) {
		case 1:case 3:case 5 :
		case 7:case 8: case 10:case 12:return 31;
		case 4:case 6:case 9:case 11:return 30;
		default:
			if(isLeapYear(year)==true) {
				return 29;
			}
			else {
				return 28;
			}
		}
	}
	//同年不同月
	public static int sameYear(int fromDay,int fromMonth,int fromYear,int toDay,int toMonth,int toYear,Set<Integer>set) {
		int money=0;
		int day=0;
		day=manyDay(fromYear, fromMonth)-fromDay+1;//初始月的天数,包括初始日期
		if(set.contains(fromMonth)) {//是否是素月
			money+=day*1;
		}else {
			money+=day*2;
		}
		day=toDay;//结束月的天数
		if(set.contains(toMonth)) {
			money+=day*1;
		}else {
			money+=day*2;
		}
		
		//中间月
		for(int i=fromMonth+1;i<toMonth;i++) {
			day=manyDay(fromYear, i);
			if(set.contains(i)) {
				money+=day*1;
			}else {
				money+=day*2;
			}
		}
		return money;
	}
	//同年同月
	public static int sameMonth(int fromDay,int fromMonth,int fromYear,int toDay,int toMonth,int toYear,Set<Integer>set) {
		int money=0;
		int day=0;
		day=toDay-fromDay+1;//初始月的天数,包括初始日期
		if(set.contains(fromMonth)) {//是否是素月
			money+=day*1;
		}else {
			money+=day*2;
		}
		return money;
	}
}

 二、斐波那契凤尾

(1)原题再现

斐波那契凤尾__牛客网
        NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。
为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。

 

输入描述:

输入有多组数据。

每组数据一行,包含一个整数n (1≤n≤100000)。

输出描述:

对应每一组输入,输出第n个斐波那契数的最后6位。

示例1

输入

1<br/>2<br/>3<br/>4<br/>100000

输出

1<br/>2<br/>3<br/>5<br/>537501

(2)问题分析

        这道题两个注意点。

        第一点不能超过数据范围,所以我们在进行加法的时候根据题目要求直接取最后六位,因为是加法,所以取六位相加和所有数相加的结果后六位是没有影响的。

        第二点不能超过运行时间,运行时间很小,肯定不能用递归。所以用一个数组直接保存所有需要的斐波那契数。因为是循环输入,如果我们每次在循环里面都建立一个数组,最后总时间就会发生超时错误。所有我们在输入循环外面建一个数组即可。

(3)完整代码

import java.util.*;
/*
*斐波那契凤尾
*/
public class Main {
    public static long[] fibs = new long[100001];
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        //生成fib
        fibs[0] = 1;
        fibs[1] = 1;
        int flag = 0;
        for (int i = 2; i < fibs.length; i++) {
            long ret = fibs[i - 1] + fibs[i - 2];
            fibs[i] = ret % 1000000;
            if (flag == 0 && ret >= 1000000) flag = i;
        }

        while (sc.hasNextInt()) {
            int n = sc.nextInt();
            if (n < flag) System.out.println(fibs[n]);
            else System.out.printf("%06d\n", fibs[n]);
        }
    }
}

​​


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea将本地项目上传git

idea将本地项目上传git 第一步&#xff1a;菜单栏 VCS——>import into Version control——>Create git Repository——>弹出框找到选中自己项目——>点击OK 第二步&#xff1a;选中项目右键 ——>git——>Add 文件会变成绿色表示成功 第三步:VCS——>co…

Nginx的概述与配置

一、Nginx概述 1、Nginx的特点 一款高性能、轻量级web服务 • 稳定性高 • 系统资源消耗低高 • 对HTTP并发连接的处理能力 单台物理服务器可支持30000~50000个并发请求 2、 Nginx编译安装 • 安装支持软件 • 创建运行用户、组 • 编译安装Nginx 3、Nginx运行控制 …

Java面试突击班(抓住金九银十) 持续更新中

文章目录1.Java中线程的实现方式&#xff1f;2. Java线程中的状态&#xff1f;3. Java中如何停止线程&#xff1f;4. Java中Sleep和wait方法的区别&#xff1f;5.扩展—— P5典型 P6典型 P7典型6.并发编程的三大特性原子性什么时并发编程得原子性保证并发编程得原子性可见性什么…

【CSS】固定定位示例 ( 屏幕左右两侧广告栏 | 开发要点分析 | 代码示例 )

文章目录一、开发要点分析二、代码示例一、开发要点分析 实现下图样式 : 中间部分是网页内容 , 左右两侧是 固定广告栏 , 不管浏览器如何滚动 , 缩放 , 该左右两侧广告栏不变 ; 标签结构分析 : 上述页面中 , 中心的版心盒子 与 左侧广告栏 / 右侧广告栏 是兄弟关系 ; <div …

如何在rust中使用泛型,trait对象的总结以及kv sever(3)

可以说在 Rust 开发中&#xff0c;泛型编程是我们必须掌握的一项技能。在你构建每一个数据结构或者函数时&#xff0c;最好都问问自己&#xff1a;**我是否有必要在此刻就把类型定死&#xff1f;**是不是可以把这个决策延迟到尽可能靠后的时刻&#xff0c;这样可以为未来留有余…

谷歌的Bard和OpenAI的GPT4的对比

前言 随着上个月21日谷歌面向公众开放人工智能聊天机器人Bard的访问权限&#xff0c;同样是上个月的14日OpenAI为聊天机器人ChatGPT发布的最新语言模型&#xff1a;GPT-4的问世&#xff0c;可以说关于ChatGPT应用的推出进入了百家争鸣的情况&#xff0c;而且竞争变得激烈起来&a…

手把手教你Temporal Fusion Transformer——Pytorch实战

建立了一个关于能源需求预测的端到端项目&#xff1a; 如何为 TFT 格式准备我们的数据。 如何构建、训练和评估 TFT 模型。 如何获取对验证数据和样本外预测的预测。 如何使用built-in model的可解释注意力机制计算特征重要性、季节性模式和极端事件鲁棒性。 什么是Temporal F…

Prophet学习(二) 时序预测开源工具包Prophet介绍

目录 一、Prophet 简介 二、Prophet 适用场景 三、Prophet 算法的输入输出 四、Prophet 算法原理 五、与机器学习算法的对比 六、代码 6.1 依赖安装 6.2 预测demo 七、参考资料 八、官方链接&#xff1a; 九、案例链接&#xff1a; 一、Prophet 简介 Prophet是Faceb…

C++学习 Day1

目录 1. C关键字(C98) 2.命名空间 3. C输入&输出 1. C关键字(C98) C总计63个关键字&#xff0c;C语言32个关键字 目前只是初学阶段&#xff0c;只是大致的了解&#xff0c;以后再深入研究。 2.命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&am…

C++中的类模版

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

Linux驱动开发——高级I/O操作(一)

一个设备除了能通过读写操作来收发数据或返回、保存数据&#xff0c;还应该有很多其他的操作。比如一个串口设备还应该具备波特率获取和设置、帧格式获取和设置的操作;一个LED设备甚至不应该有读写操作&#xff0c;而应该具备点灯和灭灯的操作。硬件设备是如此众多&#xff0c;…

PDF怎么转CAD文件?(免费!高效转换方法汇总)

一般而言&#xff0c;PDF图纸是不能修改的。若需修改&#xff0c;则需将PDF转CAD&#xff0c;此时如何满足PDF转CAD的需求呢&#xff1f;今天&#xff0c;我将教你两种免费的PDF转CAD的方法&#xff0c;助力高效办公。 1.本地软件转换法 这是用本地软件转换方法&#xff0c;支…

【系统集成项目管理工程师】项目管理一般知识

&#x1f4a5;项目管理一般知识 一、什么是项目 1、项目定义 项目是为达到特定的目的&#xff0c;使用一定资源&#xff0c;在确定的期间内&#xff0c;为特定发起人提供独特的产品、服务或成果而进行的一系列相互关联的活动的集合。项目有完整的生命周期&#xff0c;有开始…

Dubbo(超级无敌认真好用,万字收藏篇!!!!)

文章目录Dubbo前言大型互联网架构目标集群和分布式集群分布式架构演进1 Dubbo概述1.1 Dubbo概念1.2 Dubbo架构图2 Dubbo快速入门2.1 Zookeeper的安装2.2 springBoot整合DubboZookeeper2.2.1 创建项目Dubbo--provider2.2.2 创建项目Dubbo--consumer2.2.3 测试3 Dubbo高级特性3.1…

可视化 | Flask+Pyecharts可视化模板

文章目录&#x1f3f3;️‍&#x1f308; 1. 系统说明界面&#x1f3f3;️‍&#x1f308; 2. 柱状图示例界面&#x1f3f3;️‍&#x1f308; 3. 饼状图示例界面&#x1f3f3;️‍&#x1f308; 4. 折现图示例界面&#x1f3f3;️‍&#x1f308; 5. 散点图示例界面&#x1f3…

人工智能(Pytorch)搭建transformer模型,真正跑通transformer模型,深刻了解transformer的架构

大家好&#xff0c;我是微学AI&#xff0c;今天给大家讲述一下人工智能(Pytorch)搭建transformer模型&#xff0c;手动搭建transformer模型&#xff0c;我们知道transformer模型是相对复杂的模型&#xff0c;它是一种利用自注意力机制进行序列建模的深度学习模型。相较于 RNN 和…

【数据结构Java】--图、BFS、DFS、拓扑结构

目录 一、图&#xff08;Graph&#xff09; 1.概念 2.有向图 3.出度、入度 4.无向图 5.简单图、多重图 6.无向完全图 7.有向完全图 8.有权图 9.连通图 10.连通分量&#xff08;无向图&#xff09; 11.强连通图&#xff08;有向图&#xff09; 12.强连通分量 13.邻接矩…

微服务架构-服务网关(Gateway)-权限认证(分布式session替代方案)

权限认证-分布式session替代方案 前面我们了解了Gateway组件的过滤器&#xff0c;这一节我们就探讨一下Gateway在分布式环境中的一个具体用例-用户鉴权。 1、传统单应用的用户鉴权 从我们开始学JavaEE的时候&#xff0c;就被洗脑式灌输了一种权限验证的标准做法&#xff0c;…

Adobe全新AI工具引关注,Adobe firefly助力创作更高效、更有创意

原标题&#xff1a;Adobe全新AI工具引关注&#xff0c;Adobe firefly&#xff08;萤火虫&#xff09;助力创作更高效、更有创意。 以ChatGPT为首的生成式AI、AIGC等工具的战局正如火如荼的进行中..... 除了微软、百度的聊天机器人和一些初创公司的AI画图工具令人惊艳&#xff…

Greenplum数据库执行器——PartitionSelector执行节点

为了能够对分区表有优异的处理能力&#xff0c;对于查询优化系统来说一个最基本的能力就是做分区裁剪partition pruning&#xff0c;将query中并不涉及的分区提前排除掉。如下执行计划所示&#xff0c;由于单表谓词在parititon key上&#xff0c;在优化期间即可确定哪些可以分区…