分治法解此题:https://blog.csdn.net/qq_37486501/article/details/83000226
题目如下:
-
注意:
1.本题采用txt文件读入,屏幕输出;
如果需要屏幕读入屏幕输出,可以留言或者自己改代码~
2.下面分int类型和double类型的数据读入,请选择适合自己的… -
暴力法(Brute force)代码如下:
要求(输入数据为int类型)
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;public class Lyx {public static void main(String[] args) {// TODO Auto-generated method stublong startTime = System.currentTimeMillis();try {FileReader in = new FileReader("input.txt");BufferedReader inin=new BufferedReader(in);//读入文件try {String str; int i=0;int sum=Integer.parseInt(inin.readLine());int[] datalist=new int[sum];while((str=inin.readLine())!=null)//每次读一行,注意双层括号{//int data=Integer.parseInt(str);//System.out.println(data);//String强制转化成int类型datalist[i]=Integer.parseInt(str);//System.out.println("股價資料第"+i+"天"+datalist[i]);//String强制转化成int类型i++;} int sub[ ][ ] = new int[sum+1][sum+1];for(int m=0;m<sum-1;m++) {int p=0;for(int k=m+1;k<sum;k++){sub[m][p]=datalist[k]-datalist[m];p++; } }//System.out.print(sum);
// for(int m=0;m<sum-1;m++)
// {
// for(int k=0;k<sum-1;k++)
// {
// System.out.print(sub[m][k]+"\t");
// }
// System.out.println();
// }int max=0,h=0,l=0;for(int row=0;row<sum;row++) {for(int col=0;col<sum-1-row;col++){if(sub[row][col]>max){max=sub[row][col];h=row;l=col;}}}System.out.println("Brute Force求解:");System.out.println("第"+h+"日收盤買進第"+(h+l+1)+"日收盤賣出最高獲利為"+max+"元!");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}long endTime = System.currentTimeMillis();System.out.print("执行时间: "+(endTime-startTime)+" ms"); }
}
- 暴力法(Brute force)代码如下:
要求(输入数据为double类型)
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;public class Lyx {public static void main(String[] args) {// TODO Auto-generated method stub// TODO Auto-generated method stublong startTime = System.currentTimeMillis();try {FileReader in = new FileReader("input_2330.txt");BufferedReader inin=new BufferedReader(in);//读入文件try {String str; int i=0;int sum=Integer.parseInt(inin.readLine());double[] datalist=new double[sum];while((str=inin.readLine())!=null)//每次读一行,注意双层括号{//int data=Integer.parseInt(str);//System.out.println(data);//String强制转化成int类型datalist[i]=Double.parseDouble(str);//System.out.println("股價資料第"+i+"天"+datalist[i]);//String强制转化成int类型i++;} double sub[ ][ ] = new double[sum+1][sum+1];for(int m=0;m<sum-1;m++) {int p=0;for(int k=m+1;k<sum;k++){sub[m][p]=datalist[k]-datalist[m];p++; } }//System.out.print(sum);
// for(int m=0;m<sum-1;m++)
// {
// for(int k=0;k<sum-1;k++)
// {
// System.out.print(sub[m][k]+"\t");
// }
// System.out.println();
// }double max=0;int h=0,l=0;for(int row=0;row<sum;row++) {for(int col=0;col<sum-1-row;col++){if(sub[row][col]>max){max=sub[row][col];h=row;l=col;}}}System.out.println("Brute Force求解:");System.out.println("第"+h+"日收盤買進第"+(h+l+1)+"日收盤賣出最高獲利為"+max+"元!"); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}long endTime = System.currentTimeMillis();System.out.print("执行时间: "+(endTime-startTime)+" ms"); }}