pie求指点

博主在计算PI时遇到一个问题,使用%.4f格式化输出时未能通过测试,但改为%.4f 后成功。虽然double定义的pi和mid理论上应保持足够精度,但输出格式可能影响了结果。经过补充理解,博主似乎找到了问题的关键。

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

最后输出的时候用%.4f\n就通过了,而用%.4f\n就过了,不知道为什么,我的pi和mid用的是double定义的!求大佬指导!

//AC代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const double pi=acos(-1.0);
int main(){
	int q;
	scanf("%d",&q);
        int n;
		int m;	
	while(q--){		
		double a[10005];
	   scanf("%d%d", &n,&m);
		m++;
		double sum=0;
		for(int i=1;i<=n;i++){
		scanf("%lf", &a[i]);
		a[i]*=a[i];
		sum+=a[i];
		}
		
		double l=0;
		double r=sum/m;
		double mid=0;
		while((r-l)>0.0000001){
			
		int ans=0;

			mid=(l+r)/2;
			for(int i=1;i<=n;i++){
				ans+=int(a[i]/mid);
		}
		if(ans>=m)
		l=mid;
		else
		r=mid;
		}
		printf("%.4f\n",mid*pi);
	}
	return 0;
}
		
//WA代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const double pi=acos(-1.0);
int main(){
	int q;
	scanf("%d",&q);
        int n;
		int m;	
	while(q--){		
		double a[10005];
	   scanf("%d%d", &n,&m);
		m++;
		double sum=0;
		for(int i=1;i<=n;i++){
		scanf("%lf", &a[i]);
		a[i]*=a[i];
		sum+=a[i];
		}
		
		double l=0;
		double r=sum/m;
		double mid=0;
		while((r-l)>0.0000001){
			
		int ans=0;

			mid=(l+r)/2;
			for(int i=1;i<=n;i++){
				ans+=int(a[i]/mid);
		}
		if(ans>=m)
		l=mid;
		else
		r=mid;
		}
		printf("%.4lf\n",mid*pi);
	}
	return 0;
}
		
		

求指正!!!

补充
好像懂了…

来自阳光大男孩!

图片来自博主 阳光大男孩!
感谢,提醒自己和各位!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值