Guess (浮点数,高精度)

文章探讨了一次编程比赛中,根据选手提交时间和系统评测确定最终得分和排名的问题。由于预得分可能是浮点数并需保留两位小数,解决方案包括四舍五入后作为整数处理或使用高精度计算。文章提到了C语言中浮点数自动四舍五入的特性,并阐述了如何判断两个浮点数近似相等的方法。最后,提出了在无法找到满足条件的得分和排名组合时的判断标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击打开链接

题意:有 n 位选手参加编程比赛。比赛有3道题目,每个选手的每道题目都有一个评测之前的预得分(这个分数和选手提交程序的时间相关,提交的越早,预得分越大)。
接下来 是系统评测。如果某道题未通过测试,则改题的实际得分为0分,否则得分等于预得分。得分相同的选手,ID小的排在前面。
问是否能给出所有3n个得分以及最后的实际名次。如果可能,输出最后一名的最高可能得分。每个预得分均为小于1000的非负实数,最多保留两位小数。
就是给定的ID,这个按名次排的,也就是说 第 i 个数是名次为 i 的ID,这个地方一定要搞清楚,剩下的就好说了,先按名次从小到大排序,然后从 1 到 n 进行比较,如果当前的总分比前一个要小,

或者总分一样而当前的ID的大,那么就这样,不用改变,如果都不成立,那么就找离他们差值最小的组合,然后用总和减去就行,这个地方在选的时候利用暴力,一共才3个题,所以可以用二进制法进行枚举,然后找出最接近那一个,如果都所有的都不行,那么就是无解,直接结束就好了。

C语言中对于浮点数输出的四舍五入是自动进行的。在浮点数的有效位数范围内,当要求保留小数点后n位时,系统会自动根据第n+1的值自动进行四舍五入操作

所以这道题最后要求保留两位小数输出就可以把输入的得分四舍五入*100,然后就可以当做整数来做了

 

#include<bits/stdc++.h>
typedef long long
sqrt函数在计算机中计算平方根时,由于浮点数表示的精度限制,可能会引起一些精度问题。为了解决这些问题,可以采取以下几种方法: 1. **使用更高精度的数据类型**: 使用更高精度的数据类型(如`long double`)可以减少精度损失。例如,在C/C++中,可以使用`long double`来替代`double`。 2. **使用数学库**: 一些数学库提供了更高精度的平方根函数。例如,GMP(GNU Multiple Precision Arithmetic Library)提供了任意精度的数学运算。 3. **手动实现平方根算法**: 可以使用一些数值方法(如牛顿迭代法)手动实现平方根计算,以提高精度。 4. **误差补偿**: 对于一些特定的平方根计算,可以通过误差补偿来提高精度。例如,使用泰勒级数展开来近似平方根。 5. **使用整数运算**: 在某些情况下,可以使用整数运算来模拟平方根计算,特别是在嵌入式系统中。 以下是一个使用牛顿迭代法实现平方根计算的示例代码: ```c #include <stdio.h> #include <math.h> double my_sqrt(double x, double tolerance) { if (x == 0) return 0; double guess = x / 2.0; while (fabs(guess * guess - x) / x > tolerance) { guess = (guess + x / guess) / 2.0; } return guess; } int main() { double x = 2.0; double tolerance = 1e-10; double result = my_sqrt(x, tolerance); printf("sqrt(%f) = %f\n", x, result); printf("math.h sqrt(%f) = %f\n", x, sqrt(x)); return 0; } ``` 在这个示例中,`my_sqrt`函数使用牛顿迭代法计算平方根,并通过比较误差与容忍度来决定迭代次数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值