邮局问题(Java,输入输出文件)
程序员文章站
2021-12-23 21:07:48
...
import java.io.*;
import java.util.Scanner;
public class postoffice {
int result;//计算的结果
int x[];//居民点的X坐标
int y[];//居民点的Y坐标
int n;//居民点的个数n
public static void main(String[] args) {
postoffice po = new postoffice();//程序入口函数,创建类的对象并调用方法
po.iostream();
}
public void iostream(){
try {
FileWriter fw = new FileWriter("output.txt");//输出的数据文件
for(int m=0;m<5;m++){//依次读取5个数据文件
Scanner in = new Scanner(new BufferedInputStream(new FileInputStream("input_assign01_0"+ m +".dat")));//输入的数据文件
n = in.nextInt();//读取数据文件中居民点的个数
x=new int[n];
y=new int[n];
for(int i=0;i<n;i++)
{
x[i]=in.nextInt();//读取居民点的X坐标
y[i]=in.nextInt();//读取居民点的Y坐标
}
sort(x,n);//调用排序算法,将X坐标点从小到大进行排序
sort(y,n);//调用排序算法,将Y坐标点从小到大进行排序
result = sum(x,n)+sum(y,n);//调用距离求和算法,得到最佳点的邮局与所有居民点距离之和
fw.write(result+" ");//将结果输出到文件中
fw.write("\r\n");
fw.flush();
System.out.println("第"+ m + "个文件数据的结果:" + result);//将结果输出到屏幕
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void sort(int a[],int n){//排序算法,将X/Y坐标点从小到大进行排序,为了取得坐标点的中位数
int i,j,temp;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++)
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
public int sum(int a[],int n){//求和算法,计算中位数坐标值与其他坐标值距离之和
int s=0,i;
for(i=0;i<n;i++){
if(a[i]>a[n/2])
s+=a[i]-a[n/2];
else s+=a[n/2]-a[i];
}
return s;
}
}
下一篇: 利用round函数的二分查找
推荐阅读