美团笔试,为啥我第二题调到死都是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

相关推荐

下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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