c++进阶练习题--提高篇(1)

本文提供了10道C++编程练习题,涵盖逻辑推理、数学应用、字符串操作等多个方面,旨在提升C++编程能力。题目包括:汽水瓶问题、数的加减法检查、17的倍数判断、马路树的数量计算、摘苹果问题、蛇形矩阵、扫雷舰游戏、数字序列循环长度、字符串反转及链表合并。附带在线练习网站链接。
摘要由CSDN通过智能技术生成

分享一个可以练题的网站https://www.dotcpp.com/oj/problem1002.html 注册一个账号就可以线上做题

题目

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

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

样例输入
3
10
81
0
样例输出
1
5
40

对于每组测试数据,输出一行,
表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0
题目2
题目:你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,可能是不超过200的非负整数,也可能是单个字符"?",表示他不会算。
输入
输入文件包含不超过100行,以文件结束符结尾。每行包含一道题目,格式保证符合上述规定,且不包含任何空白字符。输入的所有整数均不含前导0。
输出
输出仅一行,包含一个非负整数,即弟弟答对的题目数量。

样例输入
1+2=3
3-1=5
6+7=?
99-0=99
样例输出
2
题目3
题目:定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数

输入
输入文件最多包含10组测试数据,每个数据占一行,
仅包含一个正整数n(1<=n<=10^100),表示待判断的正整数。
n=0表示输入结束,你的程序不应当处理这一行。

输出
对于每组测试数据,输出一行,表示相应的n是否是17的倍数。1表示是,0表示否。

样例输入
34
201
2098765413
0
样例输出
1
0
1
题目4
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

输入

输入的第一行有两个整数L(1 <= L <= 10000)和
M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,
L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,
用一个空格隔开,表示一个区域的起始点和终止点的坐标。

输出

输出包括一行,这一行只包含一个整数
表示马路上剩余的树的数目。

样例输入
500 3
150 300
100 200
470 471
样例输出
298
题目5
题目:陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

输入

输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

输出

输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

样例输入
100 200 150 140 129 134 167 198 200 111
110
样例输出
5
题目6
题目:蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
输入
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
输出
对于出一个N行每一组数据,输的蛇形矩阵。两组输出之间不要额外的空行。
矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
样例输入
5

样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
题目7
题目:扫雷舰,这个游戏的目标是找出附近有多少个地雷,如果扫描的地方正好是地雷,
显示地雷的形状,如果不是地雷,显示附近的地雷数。每个正方形最多有八个相邻的正方形。每个地雷由一个" * "字符表示。安全方块用 “ . ”表示 对于每个字段,仅在第一行上打印消息字段#x:第二行包含两个整数n和m,分别表示字段的行数和列数。
其中,0<m<100,0<n<100,当n=m=0的第一个字段行表示输入结束,不应进行处理。

样例输入
4 4*... .....*......3 5**.........*...0 0

样例输出Field #1:*10022101*101110

题目8
题目:考虑下面的算法来生成一个数字序列。从整数n开始。如果n为偶数,则除以2。如果n为奇数,则乘以3并加1。使用新值n重复此过程,当n=1时终止。给定任意两个数字 i 和 j,需要确定 i 和 j 之间所有数字的最大循环长度,包括两个端点。

输入:
将由一系列成对的整数 i和j 组成,每行一对整数。所有整数都将小于1000000且大于0
输出:
对于每对输入整数 i 和 j,输出 i,j 的顺序与它们在输入中出现的顺序相同,然后是 i 和 j 之间(包括i和j)整数的最大循环长度。这三个数字应该用一个空格隔开,所有三个数字在一行上,每行输入一行输出一行。

样例输入
1 10
100 200
201 210
900 1000
样例输出
1 10 20
100 200 125
201 210 89
900 1000 174
题目9
题目描述
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。
输入
输入包括一行。 第一行输入的字符串。
输出
输出转换好的逆序字符串。
样例输入
I am a student
样例输出
tneduts a ma I
题目10
题目:已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。第一行,a、b两个链表元素的数量N、M,用空格隔开。
接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成

参考答案

题目1 :

#include<iostream>
using namespace std;

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


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

样例输入
3
10
81
0
样例输出
1
5
40

对于每组测试数据,输出一行,
表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0
*/
int result = 0;
int change(int num)
{
   
	if (num <=1)
	{
   
		return result;
	}
	if (num < 3)
	{
   
		result = result + 1;
		return result;
	}
	if (num >= 3)
	{
   
		int tmp = num / 3;//一次兑换的瓶子
		int rest = num % 3;//兑换剩下的瓶子
		result = result + tmp;
		rest = rest + tmp;
		change(rest);
		
	}
	
	
}
int main()
{
    
	int n;
	cin >> n;
	int a[100];
	a[0] = n;
	int i = 1;
	while (1)
	{
   
		if (n != 0)
		{
   
			cin >> n;
			a[i] = n;
			i++;
		}
		else
		{
   
			break;
		}
	}
	for (int j = 0; j < i; j++)
	{
   
		if (a[j] != 0)
		{
   
			int sum = change(a[j]);
			cout << sum << endl;
			result = 0;
		}
		
	}
	system("pause");
	return 0;
}

在这里插入图片描述

题目2 :

/*
你的弟弟刚做完了“100以内数的加减法”这部分的作业,
请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,
其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,
可能是不超过200的非负整数,也可能是单个字符"?",表示他不会算。

输入
输入文件包含不超过100行,以文件结束符结尾。
每行包含一道题目,格式保证符合上述规定,且不包含任何空白字符。
输入的所有整数均不含前导0。

输出
输出仅一行,包含一个非负整数,即弟弟答对的题目数量。

样例输入
1+2=3
3-1=5
6+7=?
99-0=99
样例输出
2

*/
#include<iostream>
#include <sstream>
using namespace std;
int main()
{
    
	int count = 0;
	int a,b;
	char d, e; //  +/- =
	string c; //最
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值