OJ系统刷题 第九篇(难篇)

2023-11-16

13441 - 求小数的某一位(难题,二刷、三刷!)

时间限制 : 1 秒

内存限制 : 128 MB

分数\tfrac {a}{b}ba​化为小数后,小数点后第n位的数字是多少?

输入

三个正整数a,b,n,相邻两个数之间用单个空格隔开。0<a<b<100,1≤n≤10000。

输出

一个数字。

样例

输入

1 2 1

输出

5

答案:

#include<iostream>
using namespace std;
int main() {
	int a, b, n;
	cin >> a >> b >> n;
	int k = a;
	for (int i = 1; i <= n-1; i++) {

		k = k * 10 % b;
	}
	cout << k * 10 / b << endl;
	return 0;
}

分析: 这道题初次上手可能首先你会觉得很简单。可能你的做法就是把这个小数用一个double类型变量来接受。然后乘n次10,最后取这个数的个位即可。恭喜你,和我刚开始的一样。但是答案是错的。你想想

首先、1/3这个小数存在double类型变量中精度只有15位,当你求100位的时候是求不出正确结果的,因为double类型变量的精度只有15位。超过15位的小数是不知道的。

其次、当循环小数循环体大于15位时,这种方法显然是不对的。

正确做法,令

k=a,其中a为分子,求第n为小数数字,循环n-1次,循环做k=k*10%b;自己动手体会这个语句的算法思想,第一次做整体可能完全想不到这种思想最后一次循环 k*10/b;最后一步也同等重要

是否通过:

13442 - 计算星期几(难题二刷、三刷)

时间限制 : 1 秒

内存限制 : 128 MB

假设今天是星期日,那么过a^bab天之后是星期几?

输入

两个正整数a,b,中间用单个空格隔开。0<a≤100,0<b≤10000。

输出

一个字符串,代表过a^bab天之后是星期几。

其中,Monday是星期一,Tuesday是星期二,Wednesday是星期三,Thursday是星期四,Friday是星期五,Saturday是星期六,Sunday是星期日。

样例

输入

3 2000

输出

Tuesday

答案:

#include<math.h>
using namespace std;
int main() {
	int a, b;
	cin >> a >> b;
	int result=1;
	for (int i = 1; i <= b; i++) {
		result *= a;
		result %= 7;
	}
		switch (result) {
		case 1: 
			cout << "Monday" << endl;
			break;
		case 2:
			cout << "Tuesday" << endl;
			break;
		case 3:
			cout << "Wednesday" << endl;
			break;
		case 4:
			cout << "Thursday" << endl;
			break;
		case 5:
			cout << "Friday" << endl;
			break;
		case 6:
			cout << "Saturday" << endl;
			break;
		default:
			cout << "Sunday" << endl;
			break;
		} 
		return 0;
}

 分析:根据输入样例可知,a^b可能会非常非常大,即使是long long类型也存不下。因此想通过先算出a^b这个结果再进行下一步计算是不可能的。得另寻他法,当然我第一次写这个题是没想到,是借鉴别人的代码思想写出来的。其核心是:对下面语句做b次循环。

result=result*a;

result=result%7;

最后result的值是多少就是星期几。这道题和 上面计算小数的第n位数字很像。这几道题应该都是这种思想

当一个数很大的时候,没有变量可以存放的时候,这时候就要通过这个数的构造进行乘法、取模等运算使得求得的数值保持在一个小的范围内。直到得到结果

 是否通过:

13443 - 幂的末尾(建议二刷)

输入

两个正整数a,b。1≤a≤100,1≤b≤10000。

输出

从高位到低位输出幂的末三位数字,中间无分隔符。若幂本身不足三位,在前面补零。

样例

输入

7 2011

输出

743

答案:

#include<iostream>
using namespace std;
int main() {
	int a, b;
	cin >> a >> b;
	int result = 1;
	int ge, shi, bai;
	for (int i = 1; i <= b; i++) {
		result = result * a % 1000;
		ge = result % 10;
		shi = result / 10 % 10;
		bai = result / 100 % 10;
	}
	int s = bai * 100 + shi * 10 + ge;
	if (s < 10) {
		cout <<"00" << s << endl;
	}
	else if (s >= 10 && s < 100) {
		cout << "0"<< s << endl;
	}
	else {
		cout << s << endl;
	}
	return 0;
}

 分析:这道题初次来做是很难的。因为末尾三位也就在1000范围内,超过1000的也就是千位是没意义的。

result = result * a % 1000;//仔细体会这句语句

大家可以用2的n次幂来模仿计算找规律。

是否通过:

13448 - 百钱买百鸡(纯数学问题)

时间限制 : 1 秒

内存限制 : 128 MB

小明有一百块钱, 打算买一百只鸡, 现在公鸡三块钱一只,母鸡二块钱一只, 小鸡一块钱三只.

现在, 请你编一程序, 帮小明计划一下, 怎么样买法, 才能刚好用一百块钱买一百只鸡.

输入

输出

输出100元买鸡的各种方案,每个方案分别以一行输出公鸡数、母鸡数与小鸡数,以公鸡数量最大、母鸡次之、小鸡最后的顺序给出每个方案,如下面片段:

25 0 75

20 8 72

...

样例

输入

输出

答案:

#include<iostream>
using namespace std;
int main() {
	int i=0, j=0, k=0;//分别表示公鸡、母鸡、小鸡的数目
	int count = 0, price = 0, flag = 0;
	for (i = 33; i >= 0; i--) {
		for (j = 50; j >= 0; j--) {
			for (k = 110; k >= 0; k--) {
				count = i + j + k;
				price = 3 * i + 2 * j + k / 3;
				flag = k % 3;
				if (count == 100 && price == 100 &&flag == 0) {
					cout << i << " " << j << " " << k << endl;
				}
			}
		}
	}
	return 0;
}

 分析:很多人可能没想明白,为什么公鸡的数量小于33,母鸡数量小于等于50,因为100块钱最多只能买32只公鸡,50只母鸡。其实大家还可以自己再优化。这里是纯粹的数学问题简化。

是否通过:

13451 - 危险的实验

时间限制 : 1 秒

内存限制 : 128 MB

小明最近在上化学课,他需要使用到 n 种化学物质来进行他的实验。在做实验的 时候, 他需要将所有化学物质放在桌面上,按次序排成一条直线。

然而每一种化学物质都是危险品,对于第 i 个化学物质,如果有另外一个化学物 质距离它的距离小于 ai,那么就会发生爆炸。

小明想知道如果要安全的完成他的实验,桌子最短可以多短。

输入

第一行一个整数n,表示化学物质的个数。

第二行有n 个整数,第 i 个整数 ai 表示第i 个化学物质必须与其他化学物质保 持的距离。

输出

输出一行,包括一个整数,表示能够让小明安全完成实验的桌子最小长度。注意: 物品要安原来的次序摆放。

样例

输入

3
3 1 2

输出

5

提示

20%的数据,1<=n<=20

50%的数据,1<=n<=100000

100%的数据,1<=n<=1000000,1<=ai<=100000

 答案:

#include<iostream>
using namespace std;
int main() {
	int n;
	cin >> n;
	int final,previous=0;
	long long sum = 0;
	for (int i = 1; i <= n; i++) {
		cin >> final;
		if (final > previous && i != 1) {
			sum += final;
		}
		else if(final <= previous && i != 1){
			sum += previous;
		}
		previous = final;
	}
	cout << sum << endl;
	return 0;
}

分析:这道题还是有难度的,我在做这道题的时候,由于第一次做,对题目意思理解不是很清楚。先说说题目的意思。题目的意思是

首先:至少得有两种化学药品。不可能只有一种药品,因此n不可能为1。

其次:就是这个距离的范围,开始没注意题目下边的提示,用int范围内的数据表示距离,发现完全不够,只能过前两个测试点,但是等n很大,而且每个a[i]也很大时,发现距离范围高达50亿,int范围是表示不了的。

最后:就是逻辑了,当输入的当前距离比前一种物品距离小,则加上前一种物品的距离。否则加上当前物品的距离,因此得用一个变量previous来记录前一个物品的距离。

这个题有很多种变形,重要的是理解题目意思和掌握它的逻辑算法。

是否通过:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OJ系统刷题 第九篇(难篇) 的相关文章

随机推荐

  • Selenium基础 — Selenium自动化测试框架介绍

    1 什么是selenium Selenium是一个用于Web应用程序测试的工具 只要在测试用例中把预期的用户行为与结果都描述出来 我们就得到了一个可以自动化运行的功能测试套件 Selenium测试套件直接运行在浏览器中 就像真正的用户在操作
  • spring+springMVC+MyBatis 分页功能代码封装

    页面效果图展示 分页工具类 Pagination package com wlsq kso util import java io Serializable import java util ArrayList import java ut
  • 【uniapp】原生子窗体subNvue的使用与踩坑

    需求 最近接到个需求 需要在video组件上弹出弹窗 也就是覆盖video这个原生组件 未播放时 弹窗可以覆盖 但是当video播放时 写的弹窗就覆盖不了了 因为video是原生组件 层级非常高 普通标签是覆盖不了的 map标签同理 覆盖原
  • 【前端】Bad control character in string literal in JSON解决方案(详解),JSON.parse(str)/Uncaught SyntaxEr报错解决方法。

    问题描述 let text fail station FSW WELDING DRY 2 r n fail resourceid 200118223 r n fail timestamp 2022 12 17 JSON parse text
  • 宝塔部署Springboot项目与踩坑

    目录 1 宝塔硬件方面 2 转储数据库 3 开放端口 4 打包maven项目 1 宝塔硬件方面 首先在宝塔上安装完成mysql与Tomcat 然后在MySQL的配置文件中添加 skip grant tables 重载配置并启动 注意可能会启
  • tomcat下CSS失效

    项目改界面的时候 把新界面套用到原有页面上去 总是不正常 有部分CSS显示不出来 弄了半天才发现 原来是tomcat缓存的问题 把tomcat的缓存 也就是work文件夹下的相关文件删除就正常了 具体原因好像是因为 tomcat的jsp文件
  • 16.BIO、NIO、AIO 有什么区别?

    简单介绍 BIO 就是传统的 java io包 它是基于流模型实现的 交互的方式是同步 阻塞方式 也就是说在读入输入流或者输出流时 在读写动作完成之前 线程会一直阻塞在那里 它们之间的调用时可靠的线性顺序 它的优点就是代码比较简单 直观 缺
  • Python分析

    一 前言 大家好 首先说明的是 这是一篇技术文 也是一篇not技术文 今天分享的是 当我获取了微信小程序英文取名的3500多个微信用户昵称 年龄段后 分析得到下面解果 二 Let s get it 1 基本信息获取 1 访问英文取名的用户基
  • 可视化修改SQL服务器名字,修改sql server服务器名称

    SQLServer复制需要有实际的服务器名称才能连接到 修改完后 重启SQL SERVER服务 第二种情况下 为远程服务器增加 别名 使用别名代替IP地址来连接远程数据库服务器 我自己用的是SQL SERVER2012 打开SQL SERV
  • selenium⼊⻔到放弃-------->学会了就是玩,能玩出花来

    目录 爬虫和反爬虫之间的斗争 爬虫的建议 动态HTML技术了解 获取ajax数据的方式 selenium chromedriver获取动态数据 selenium 下载chromedriver 安装Seleniumselenium入门 Chr
  • vue3 子组件向父组件传递数据,函数

    父组件向子组件传递参数请看 父组件vue3 setup 父组件向子组件传递参数 子组件 defineExpose 暴露uid name参数和sonToFather的方发 在setup语法糖里面defineExpose不用import引入直接
  • SummaryWriter的使用

    from torch utils tensorboard import SummaryWriter import numpy as np from PIL import Image writer SummaryWriter logs ima
  • el表达式和jstl标签库

    el表达式 只用于jsp页面中 el表达式的最初提出来的时候的作用 1 可以从域对象中获取数据 比较简单 获取域对象内容的表达式 pageContext request session application 2 第二种用法 在el表达式中
  • 一个可以让你斩获大厂Offer的笔记、速来领取

    青春啊 永远是美好的 可是真正的青春 只属于这些永远力争上游的人 永远忘我劳动的人 永远谦虚的人 最近收到不少的优秀学生投稿 他们有投稿手写笔记 有手写博客 也还有视频 小编也从中挑出几篇较为优秀的文章 下面一起看看吧 C认证优秀学员笔记又
  • HashMap多线程造成了CPU100%,死循环

    resize 方法的时候是罪魁祸首
  • STM32F1xx IAP跳转App 后中断异常及解决

    网上看到一些网友遇到STM3F1xx系列编写IAP程序经常遇到跳转到App后中断异常的问题 如一触发串口接收中断就复位等 现梳理如下 其实引起上述异常的根本原因就是 共用一组件 中断无入口 如 IAP程序中配置并打开了USART1接收中断
  • 使用Vue实现div上下收缩动画效果

    封装组件
  • springboot原理

    1 什么是SpringBoot SpringBoot是一个快速开发框架 快速的将一些常用的第三方依赖整合 原理 通过Maven子父工程的方式 简化XML配置 全部采用注解形式 内置Http服务器 Jetty和Tomcat 最终以java应用
  • ConstrainLayout解决复杂的嵌套布局

    最近 项目比较忙 没什么时间写博客 今天我要讲的是 项目中复杂的嵌套布局你讲采取何种方式呢 如果按常规方式去做 估计你做完一个界面 估计够呛 我将推荐你们使用谷歌推出的ConstrainLayout 虽然还没有出正式版本 但用于复杂嵌套布局
  • OJ系统刷题 第九篇(难篇)

    13441 求小数的某一位 难题 二刷 三刷 时间限制 1 秒 内存限制 128 MB 分数 tfrac a b ba 化为小数后 小数点后第n位的数字是多少 输入 三个正整数a b n 相邻两个数之间用单个空格隔开 0