OJ刷题 第十七篇

news2024/12/27 11:34:25

34005 - 汽水瓶

时间限制 : 1 秒

内存限制 : 128 MB

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

输入

输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。

输出

对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

样例

输入

3
10
81
0

输出

1
5
40

答案:

#include<iostream>
using namespace std;
int main() {
	int N;
	while (true) {
		cin >> N;
		if (!N) {
			break;
		}
		else {
			int r = N % 3;//不能兑换的瓶子
			int exchange = N / 3;//可兑换的瓶子
			int sum = r + exchange;//喝完后的瓶子加上之前不能兑换的瓶子
			int count = exchange;//喝水的总数
			while (sum >= 2) {
				if (sum == 2) {
					count++;
					break;
				}
				else {
					r = sum % 3;
					exchange = sum / 3;
					count += exchange;
					sum = r + exchange;
				}
			}
			cout << count << endl;
		}
	}
	return 0;
}

 分析:这道题首先我们要格外注意只剩下两个瓶子的情况,原则上是不能继续兑换水的,但是题目特意交代可以通过接一瓶水喝完后凑齐一瓶水再还给老板,这个题目比之前单纯的兑换喝水问题加了一点难度,因此要特别留意一下空瓶子为2的时候。

是否通过:

34006 - 数字竞技

时间限制 : 1 秒

内存限制 : 128 MB

小灰灰和小东东在玩一种竞技游戏。在游戏中,小灰灰给小东东由n个正整数组成的序列以及m条操作指令,需要小东东按照指令来对n个整数进行操作。其中每条指令都包括二个整数(a, b),意义如下:

如果a大于0,表示将序列中第b个数乘于2;

如果a小于0,表示将序列中第b个数加上2;

如果a等于0,则忽略此条指令。

游戏结束后,小东东需要求出序列中的最大值。现在小东东求助于你,希望你能用计算机编程求出他需要的答案。题目保证计算结果在int的表示范围内。

输入

输入数据第一行为一整数T,表示有T组数据。每组输入数据第一行有二个整数n, m, (1 <= n <= 100), (1 <= m <= 100), 第二行有n个整数(1 ~100),表示初始序列,编号从1...n。接着是m行表示m条指令,每行共有2个用空格隔开的整数a b,(-50<= a <= 50), (1 <= b <= n)。

输出

对于每组数据,输出一个整数占一行,表示操作后的序列中的最大整数。

样例

输入

2
2 2
1 2
1 1
-1 2
3 4
1 5 6
1 1
1 1
0 1
-1 1

输出

4
6

 答案;

#include<iostream>
using namespace std;
int main() {
	int T;
	cin >> T;
	while (T) {
		int n, m, a, b;
		int arr[101];
		cin >> n >> m;
		//输入数据
		for (int i = 1; i <= n; i++) {
			cin >> arr[i];
		}
		//输入指令并处理数据
		for (int i = 1; i <= m; i++) {
			cin >> a >> b;
			if (a > 0) {
				arr[b] = arr[b] * 2;
			}
			else if (a < 0) {
				arr[b] = arr[b] + 2;
			}
			else {
				;
			}
		}
		//找出最大值
		int max = arr[1];
		for (int i = 2; i <= n; i++) {
			max = max > arr[i] ? max : arr[i];
		}
		cout << max << endl;
		T--;
	}
	return 0;
}

 分析:这个题第一眼看上去有点理不清题目,其实很简单,每组数据有两个参数n、m,n表示n个数据,m表示有m条指令。这m条指令是用来操作这n个数据的。这个题目本身不难,只是数据输入那里理清需要一点时间。

是否通过:

 

 

34007 - 高精度加法(经典题)

时间限制 : 1 秒

内存限制 : 128 MB

计算两个非负整数之和

输入

从键盘上输入两个非负整数,每个数占一行,每个数的位数不超过240

输出

输出只有一行为两个数之和。

样例

输入

12
13

输出

25

答案:

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
//字符转为数字
inline int f(char c) {
	switch (c) {
	case '0':
	case'\0':
		return 0;
	case '1':
		return 1;
	case '2':
		return 2;
	case '3':
		return 3;
	case '4':
		return 4;
	case '5':
		return 5;
	case '6':
		return 6;
	case '7':
		return 7;
	case '8':
		return 8;
	case '9':
		return 9;
	}
}

int main() {
	char a[300] = { 0 }, b[300] = { 0 }, sum[300] = { 0 };//数组a、b分别表示两个加数,sum表示和
	cin >> a>>b;//输入数据
	//逆序
	int a_len = strlen(a);
	int b_len = strlen(b);
	for (int i = 0, j = a_len - 1; i < j; i++, j--) {
		int tem = a[i];
		a[i] = a[j];
		a[j] = tem;
	}
	for (int i = 0, j = b_len - 1; i < j; i++, j--) {
		int tem = b[i];
		b[i] = b[j];
		b[j] = tem;
	}
	//求出加数较大的位数
	int max = a_len > b_len ? a_len : b_len;
	int jw = 0,SUM=0;
	int length = 0;
	//高精度加法
	for (int i = 0; i < max; i++) {
		SUM = f(a[i]) + f(b[i])+jw;
		jw = SUM / 10;
		sum[i] = SUM % 10 + 48;//数字转为字符
		length++;
	}
	//最高位进位不为0,则和的位数加1
	if (jw != 0) {
		sum[length] = jw + 48;
		length++;
	}
	for (int i = length - 1; i >= 0; i--) {
		cout << sum[i];
	}
	return 0;
}

 分析:这道题有的人上来就是定义两个long long类型的数据进行加法,我可以明确告诉你,long long类型表示的范围也就才900亿亿多,对于高精度加法来说是完全不够的,比如进行两个人5000多位数的加法long long是完全不能进行的,范围有限。因此我们要回到小学的加法运算,如下:

就是从个位开始加,满10向高位进1,但是对计算机怎么计算呢??

首先,如果我们就按照字符串顺序存储的话会带来计算上的困难,不是说不可以,为了计算方便,我们把字符串逆序存储,比如123+789计算如下;

 

最后我们只需要把计算结果逆序输出就可以了。在这里我还要强调一下这个计算,比如计算999+998,如下: 

当最高位还有进位时,此时结果位数多1,这种情况容易被忽略。

34008 - 奇怪的车牌号(走了弯路,建议再仔细看一下)

时间限制 : 1 秒

内存限制 : 128 MB

汽车的车牌号是一个8位数,最高位可以为0,所以车牌号范围为00000000到99999999。

有一辆汽车出了事故,司机驾车逃跑,有三位目击者向警方提供线索。

甲:车牌号的前4位是递增的自然数,如0 1 2 3 ,或1 2 3 4 ,…… 最多为6 7 8 9

乙:车牌号的后4位也是递增的自然数

丙:车牌号的数字和是某个整数的平方

例如:0 1 2 3 1 2 3 4就是满足上面的三个条件

0 1 2 3和1 2 3 4 均为递增的自然数,其数字和16为4的平方。

当然,满足上面的三个条件的车牌号还有许多,你的任务求出所有满足条件的车牌号个数。

输入

输出

一个整数,即满足条件的车牌号的个数。

样例

输入

输出

 答案:

#include<iostream>
#include<math.h>

using namespace std;
int main() {
	int i1, j1, k1, d1;//表示车牌号前4个数字
	int i2, j2, k2, d2;//表示车牌号后4个数字
	int count = 0;
	for (int i = 0; i <= 6; i++) {
		i1 = i;
		j1 = i1 + 1;
		k1 = i1 + 2;
		d1 = i1 + 3;
		for (int j = 0; j <= 6; j++) {
			i2 = j;
			j2 = i2 + 1;
			k2 = i2 + 2;
			d2 = i2 + 3;
			int sum = i1 + j1 + k1 + d1 + i2 + j2 + k2 + d2;
			//判断一个数是不是完全平方数
			if (sqrt(sum) - (int)sqrt(sum) < 0.00001) {
				count++;
			}
		}
	}
	cout << count << endl;
	return 0;
}

分析:这个题要把握好前4位和后4位都是递增的自然数这个条件,不要把题目想的复杂了,其实题目意思很简单,只需要一个二重循环,因为第一个车牌号确定后,剩下的几个车牌号也就确定了,比如第一个车牌号是1,那么第二个只能是2,第三个只能是3,第四个只能是4.后面4个车牌号也是如此。(可以自己把满足条件的车牌号码打印出来)

是否通过:

 

34009 - 连续非素数的最长度

时间限制 : 1 秒

内存限制 : 128 MB

给出一个正整数n(2≤n≤1000000),例如n=30,在1,2,3,……30中,连续的非素数有

4 长度为1

6 长度为1

8 9 10 长度为3

12 长度为1

14 15 16 长度为3

18 长度为1

20 21 22 长度为3

24 25 26 27 28 长度为5

30 长度为1

其中,最大长度为5,即有连续的5个非素数。

输入

一个整数n

输出

一个整数,即连续非素数最大长度

样例

输入

12

输出

3

答案:

#include<iostream>
#include<math.h>
using namespace std;
bool isPrimeNumber(int N) {
	if (N == 1) {
		return false;
	}
	else if (N == 2) {
		return true;
	}
	else {
		for (int i = 2; i <= sqrt(N); i++) {
			if (N % i == 0) {
				return false;
			}
		}
		return true;
	}
}
int main() {
	int N;
	cin >> N;
	int count = 1,max = 0;
	bool constant = true;
	for (int i = 2; i < N; i++) {
		if (!isPrimeNumber(i) && !isPrimeNumber(i+1)) {
			count++;
		}
		else {
			max = max > count ? max:count;
			count = 1;
		}
	}
	max = max > count ? max : count;
	cout << max << endl;
	return 0;
}

分析:这篇博客这几道题都不是很难,除了那个高精度加法可能有点新颖以外,其他题目都不是很难,这个题目也是老生常谈的一个题目,就是找最大连续子段和,就是用一个变量max来记录当前找到的最大长度,之后再慢慢更新。

是否通过: 

 

 

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

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

相关文章

寻找失落的数字:让有序数组完美覆盖的最小区间范围

本篇博客会讲解力扣“228. 汇总区间”的解题思路&#xff0c;这是题目链接。 解题思路&#xff1a;使用left和right来维护有序区间的左右端点。一开始&#xff0c;left和right都初始化为0。注意&#xff0c;不能把right初始化成1&#xff0c;因为当数组只有1个元素时&#xff0…

MySQL 高可用配置及故障切换

MySQL 高可用配置及故障切换 一、MHA1.1 什么是 MHA1.2 MHA 的组成1.3 MHA 的特点1.4 MHA工作原理 二、搭建 MySQL MHA2.1 实验思路2.2 部署过程2.3 环境准备2.4 搭建MHA 一、MHA 1.1 什么是 MHA 1、MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可…

Redis基础认识

日升时奋斗&#xff0c;日落时自省 目录 1、Redis安装及配置 2、缓存简介 2.1、缓存优点 2.2、缓存分类 2.3、常见缓存使用 2.3.1、Spring Cache 2.3.2、Redis 3、Redis数据类型和使用 3.1、字符串类型 3.2、哈希类型 3.3、列表类型 3.4、集合类型 3.5、有序集合类…

华为举办5G商业对话沙龙,携手运营商共促5G产业再升级

【中国&#xff0c;上海&#xff0c;2023年06月27日】在2023 MWC 上海期间&#xff0c;华为举办“5G商业对话沙龙”&#xff0c;旨在面向国内外运营商&#xff0c;搭建产业深度交流和求策问计的对话平台&#xff0c;共同促进5G产业再升级。会议期间&#xff0c;与会嘉宾达成一致…

回收站数据恢复方法 回收站清空如何恢复数据

在日常使用计算机时&#xff0c;我们经常会不小心删除文件或者清空回收站&#xff0c;导致重要的数据似乎丢失。然而&#xff0c;在某些情况下&#xff0c;我们仍然有可能通过一些回收站数据恢复方法来找回已经被清空的回收站中的数据。今天我们一起来了解一下回收站数据恢复方…

HadoopHA搭建

主机设置 三台主机关闭防火墙 三台主机关闭SeLinux安全机制 给每台主机修改主机名 配置三台主机地址映射 设置免密登录 安装JDK 解压安装 配置jdk的环境变量 测试安装成功 分发JDK 分发配置文件 ZooKeeper配置 解压安装 添加ZK环境变量 分发文件 启动 安…

Redis基础第一篇

一 简介 redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这些数据类型都支持push/pop、add/remove及…

【Python基础函数笔记】random.shuffle()

官方文档&#xff1a;random --- 生成伪随机数 — Python 3.10.11 文档 import random a[[sunny123.com,sunny],[zhangsanjust.cn.com,zhangsan],[lisijust.cn.com,lisi],[wangwujust.cn.com,wangwu]] random.shuffle(a) print(a)random.shuffle()用来打乱列表的。

ubuntu20下安装网络调试助手

1、下载安装包 链接&#xff1a;https://pan.baidu.com/s/1g-IzsYBuicxiRaeo4aNyqw?pwd35wm 提取码&#xff1a;35wm --来自百度网盘超级会员V6的分享 2、安装依赖文件 sudo add-apt-repository ppa:rock-core/qt4 sudo apt install libqt4-declarative 3、安装网络调试工…

如何在 SOLIDWORKS 工程图中显示金折弯线?

今天我们将展示使用多种方法可以使钣金折弯线在SOLIDWORKS工程图中显示&#xff08;或不显示&#xff09;。 在哪里可以找到弯曲线 首先&#xff0c;我们需要知道弯曲线存储/创建/保存的位置。在使用钣金工具生成的零件中&#xff0c;折弯线存储在展开模式特征中。显示/隐藏和…

差值结构的基态和跃迁

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由5张二值化的图片组成&#xff0c;让差值结构中有6个1, 行分布是0&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;2列分布是4&#xff0c;2. 得到数据 差值结构 A-B 迭代次数 共…

win10笔记本电脑总是自动休眠解决办法

1、运行regedit&#xff0c;进入注册表编辑器&#xff1b; 2、在打开的注册表编辑器左侧定位到&#xff1a;计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0&…

软件测试必问的十道面试题

前言 &#xff08;第一个就刷掉一大批人&#xff09; 有很多“会自动化”的同学来咨询技术问题&#xff0c;他总会问到我一些元素定位的问题。元素定位其实都不算自动化面试的问题。 一般我都会问&#xff1a;你是定位不到吗&#xff1f;通常结果都是说确实定位不到。 做自…

100种思维模型之冗余备份系统思维模型-84

冗余备份系统思维&#xff0c;源于工程学&#xff0c;它指的是利用并联模型来提高系统可靠性&#xff0c;即通过备份或者自动防故障设备、措施来应对意外情况。 生活中&#xff0c;我们常说的Plan B、备胎计划等就是一种冗余备份。 01、何谓冗余备份系统思维模型 一、冗余备份…

C++primer(第五版)第三章(字符串、向量和数组)

本章主要介绍了字符串和vector以及数组&#xff0c;但是vector和数组差不多甚至比数组更加强大&#xff0c;完全可以用vector来代替数组&#xff0c;所以尽管书中有介绍数组&#xff0c;但我也不过多记录&#xff0c;有兴趣的小伙伴可以自行查看原书。 3.1命名空间的using声明…

MySQL-SQL InnoDB引擎 (上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

使用VuePress生成静态网站并部署到github

目录 第一步 安装VuePress第二步 书写博客第二步 部署到github 第一步 安装VuePress VuePress是一个基于Vue驱动的静态网站生成器 相关资料 文档&#xff1a;https://v1.vuepress.vuejs.org/zh/github: https://github.com/vuejs/vuepressvuepress-deploy: https://github.c…

在 CentOS 7/8 上安装 NVIDIA Container Toolkit

文章目录 设置存储库和 GPG 密钥更新包列表后安装 nvidia-container-toolkit 包&#xff08;和依赖项&#xff09;配置 Docker 守护进程以识别 NVIDIA 容器运行时设置默认运行时后&#xff0c;重新启动 Docker 守护进程以完成安装测试 参考官方文档&#xff0c;在 CentOS 7 上…

测试用例设计简单吗?简单!但你有可能栽在这5道S级测试用例设计题上!(附答案)

很多人不知道写测试用例有什么用&#xff0c;而仅仅是像工具人一样&#xff0c;在每次提测之前&#xff0c;把测试用例照着需求文档抄一遍&#xff0c;仿佛像是走个过场。 开发提测之后&#xff0c;就照着测试用例点点点&#xff0c;可能一天就走完用例了&#xff0c;开发代码写…

Spring专家课程Day01_Spring-IOC

​ 文章目录 基础配置1)基础文件结构(Maven项目创建) 一、01_Spring概述_IOC_HelloWorld1.Spring框架的两个核心功能1.1) IOC/DI ,控制反转依赖注入!1.2) AOP,面向切面编程 2.IOC的两种模式2.1)配置文件中配置 Bean2.2)配置文件,组件扫描注解类注解Component 二、02_JavaBean_J…