美团笔试,为啥我第二题调到死都是18%,实在搞不懂哪里错

import java.util.*;
public class Main {
	public static final double P=3.141592697;
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String num=sc.nextLine();
		String[] cover=sc.nextLine().split("\\s+");
		Integer[]or=new Integer[cover.length];
		for(int i=0;i<cover.length;i++){
			or[i]=Integer.parseInt(cover[i]);
		}
		Arrays.sort(or,new MaxComparator());
		double[]res=new double[cover.length];
		for(int i=0;i<or.length;i++){
			if(i==or.length-1)
				res[i]=P*or[i]*or[i];
			else
				res[i]=P*or[i]*or[i]-P*or[i+1]*or[i+1];
		}
		double sum=0;
		for(int i=0;i<res.length;i+=2)
			sum+=res[i];
		sum=(double)Math.round(sum*100000)/100000;
		System.out.println(sum);
	}
	public static class MaxComparator implements Comparator<Integer>{
		public int compare(Integer o1,Integer o2){
			return o2-o1;
		}
	}

}

#美团#
全部评论
** 原来是这个样子  弄了好久  。。。。。。PI精度不够
1 回复 分享
发布于 2020-03-26 21:49
可能用 python 做好一点。。。 import math if __name__ == '__main__':     n = int(input())     rs = [int(x) for x in input().split()]     rs.sort(reverse=True)     res = 0     for i in range(n):         if i % 2 == 0:             res += rs[i] ** 2         else:             res -= rs[i] ** 2     res *= math.pi     print('%.5f' % res)
点赞 回复 分享
发布于 2020-03-26 23:15
有人c++的吗。。好像编译器不认识double,float好歹还18%,double直接0。。。 ps.还好最后python过了,但被坑了好久。。。
点赞 回复 分享
发布于 2020-03-26 22:24
π不精确,我一开始3.1415926也是18%,后来打开win10计算器,复制了一长串过去就100%了
点赞 回复 分享
发布于 2020-03-26 21:35
卡在45 居然还要排序...恶心啊
点赞 回复 分享
发布于 2020-03-26 21:31
不排序 pi用3.1415926535 18%  不排序 pi用math.pi 45%  排序 pi用math.pi 100%
点赞 回复 分享
发布于 2020-03-26 21:28
c++当场抓狂,不知道库里的pi在哪。。自己的精度好像也不够
点赞 回复 分享
发布于 2020-03-26 21:27
巧了,在下也是死活18%,是不是π的精度不够啊 ``` using namespace std; const double PI=3.1415926; int main(){ std::ios::sync_with_stdio(false); std::cin.tie(0);     int T;     cin>>T; int n=T;     vector<int> r;     while(n--){         int t;         cin>>t;         r.push_back(t);     }     double ret=0;     sort(r.begin(),r.end(),greater<int>());     for(int i=0;i<r.size();i++) cout<<r[i]<<' ';     cout<<endl;     if(T%2!=0) r.push_back(0);     for(int i=0;i<r.size();i+=2){         ret+=r[i]*r[i]-r[i+1]*r[i+1];     }     ret=ret*PI;     printf("%.9f\n",ret);     printf("%.5f",ret); return 0; } ```
点赞 回复 分享
发布于 2020-03-26 21:25
pi不对吧,3.14159265358
点赞 回复 分享
发布于 2020-03-26 21:22
你们的其他代码能发出来看看么,我每题ac好低,看看问题出在哪里😂
点赞 回复 分享
发布于 2020-03-26 21:21
要排个序真的坑,我的垃圾ac代码。。。 ```java public static void main(String[] args) {         Scanner in = new Scanner(System.in);         int n = in.nextInt(); // 圆的数量         boolean jishu = false;         int[] r = new int[n];         for (int i = 0; i < n; i++) {             r[i] = in.nextInt();         }         Arrays.sort(r);         if ((n & 1) == 1) jishu = true; // 最里面是黑色的         double[] s = new double[n];         for (int i = 0; i < n;i++) {             int radius = r[i];             s[i] = Math.PI * radius * radius;         }         BigDecimal res = new BigDecimal(0);         for (int i = n-1; i >=1 ;i-=2) {             res = res.add(new BigDecimal(s[i] - s[i-1]));         }         if (jishu) {             res = res.add(new BigDecimal(s[0]));         }         DecimalFormat format = new DecimalFormat("#0.00000");         System.out.println(format.format(res));     } ```
点赞 回复 分享
发布于 2020-03-26 21:19
我也是,然后改python,过了45,醉了,思路一米一样
点赞 回复 分享
发布于 2020-03-26 21:17
没排序
点赞 回复 分享
发布于 2020-03-26 21:13

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
头像
2025-12-23 12:56
英特尔_Software_engineer
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务