2025_11_14洛谷【入门1】数据结构刷题小结

一、P5705 【深基2.例7】数字反转 - 洛谷

方法1

关于这一个题,我看见数字的反转我就先想到利用取模%和除法/依次得到每一位数,但是发现它是一个浮点数,浮点数是不可以进行取模运算的,我就想着直接创建一个int类型的变量c,然后它直接等于输入的浮点数a*10,这样循环遍历,每次c%10就可以得到个位的数,然后输出变量b就是等于b*10+c%10,接着c等于c/10,循环结束的条件为c>0,这样按照样例来说,最后的b就等于了4321,再让b除以1000,就变成了浮点数,然后输出就行。这是我自己理解的方法,代码如下:

cpp 复制代码
#include<iostream>
using namespace std;
int main()
{
	double a = 0;
	cin >> a;
	double b = 0;
	//先乘以10在依次%10,/10得到每一位数,最后得到的4位数除100
	int c = a * 10;
	while (c > 0)
	{
		b = b * 10 + c % 10;
		c = c / 10;
	}
	cout << b / 1000;
	return 0;
}

方法2

然后我还在题解中发现了,原来这个题是可以用字符来写的,对应的代码如下:

cpp 复制代码
#include<iostream>
using namespace std;
string a;
signed main()
{
	cin >> a;
	int len = a.size();
		for (int i = len - 1; i >= 0; i--)
			cout << a[i];
	return 0;
}

先是定义字符串变量a,然后输入样例123.4,这里其实是以字符串的形式存储的这个浮点数,包含了那个小数点,然后调用size()方法计算字符串长度存放在整形变量len中,然后用for循环从后向前依次输出字符串中的每个字符,包括小数点。

方法3

更简单的还有直接用scanf和printf直接输入:

cpp 复制代码
#include <iostream>

using namespace std;
char a, b, c, d;
int main(){
	scanf("%c%c%c.%c", &a, &b, &c, &d);
	printf("%c.%c%c%c", d, c, b, a);
	return 0;
}

这里直接定义4个字符,然后scanf格式化输入,printf格式化输出,非常简单!但是这里要注意的是scanf输入必须要和引号中的一样,以样例为例就输入:123.4。

方法4

还有更更简单的主要代码就一行,代码如下:

cpp 复制代码
#include<iostream>
using namespace std;
int main()
{
	printf("%c%c%c%c%c\n", getchar(), getchar(), getchar(), getchar(), getchar());
	return 0;
}

这里利用了printf函数的一个特性,参数从后往前求值,即:printf("%u %u\n",work1(),work2())会先执行work2(),再执行work2()。所以这里我们先输入123.4,则从后往前的getchar函数依次得到的数为4.321,这样就完成了数字反转,非常简单!

二、P5706 【深基2.例8】再分肥宅水 - 洛谷

方法1

这个题比较思路非常明确,要计算哪些东西也都已经说清楚了,但是我想用C++中cout的格式化输出浮点数,这就要用到iomanip这个库中的函数,fixed用来强制以固定小数点格式输出,而不是科学计数法,setprecision(n)设置小数点后保留的位数,所以具体代码如下:

cpp 复制代码
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
	double t = 0;
	int n = 0;
	cin >> t >> n;
	cout << fixed << setprecision(3)<<(t / n) << endl;
	cout << n * 2;
	return 0;
}

方法2

也可以直接使用C语言中的print函数,这样更简单,具体代码如下:

cpp 复制代码
#include<iostream>
using namespace std;
int main()
{
	double t = 0;
	int n = 0;
	cin >> t >> n;
	printf("%.3f\n%d", (t / n) * 1.000, n * 2);
	return 0;
}

这里有一个小点要注意,t/n的结果可能是一个整数,因为整数除以整数的结果为整数,所以我们需要乘以1.000。

相关推荐
oier_Asad.Chen7 分钟前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
用户0595401744622 分钟前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css
满栀58531 分钟前
状态管理:Redux、Vuex、Pinia 核心区别
前端·javascript·typescript
一拳不是超人1 小时前
DeepSeek Harness 为什么敢说"一切皆插件"?拆透 Cordis 引擎的五大核心机制
前端·人工智能·agent
IT_陈寒1 小时前
Python的GIL让我多写了500行代码
前端·人工智能·后端
风骏时光牛马1 小时前
AI智能体能力调度微服务
前端
leisoo80972 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
Eloudy3 小时前
ReAct 原理简介
前端·javascript·人工智能·react.js·agent·gpu
luj_17684 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
ZJU_统一阿萨姆4 小时前
【DSH】如何将 DeepSeek Harness 嵌入生产环境?万字解构 DeepSeek Agent Harness 的运行机制与安全边界
前端·javascript·安全