好久没参加考试了,今天收到了某公司发来的编程题目就做了一下,无奈都是超时,也没有想到好的其他的思路,就只好提交了,这里我尝试了python和java两种版本的代码都是超时,现在贴出来希望抛砖引玉得到高手指点,谢谢
题目大意:
输入
先输入点数n
之后每行为圆周上点的角度求圆周上相距最远的点的距离,以角度值表示即可
下面是python的实现:
import math
num=180.00000000
n=int(raw_input())
num_list=[]
for i in range(n):
num_list.append(float(raw_input()))
res_list=[]
for i in range(n):
for j in range(i+1,n):
tmp=abs(num_list[i]-num_list[j])
if tmp>num:
res_list.append(abs(tmp-num))
else:
res_list.append(tmp)
res=max(res_list)
temp=str(res)
length=len(temp.split('.')[-1])
if length<8:
temp+='0'*(8-length)
print temp
结果如下:
4
10.00000000
180.00000000
183.00000000
198.00000000
173.00000000
下面是Java的实现:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.text.DecimalFormat;
class Distance1
{
public static void main(String[] args)
{
//BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//int n = bf.readLine();
DecimalFormat df = new DecimalFormat( "0.00000000");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
double [] test=new double[n];
for (int i=0;i<n ;i++ )
{
//test[i]=bf.readLine();
test[i]=sc.nextDouble();
}
double flag=1.00000000;
for (int i=0;i<n ;i++ )
{
for(int j=0;j<n;j++)
{
double tmp=Math.abs(test[i]-test[j]);
if (tmp>180)
{
tmp=Math.abs(tmp-180.00000000);
}
flag=flag>tmp?flag:tmp;
}
}
System.out.println(df.format(flag));
}
}
结果如下:
4
10.00000000
180.00000000
183.00000000
198.00000000
173.00000000