分治法解此题: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 stub
long 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 block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.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 stub
long 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 block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.print("执行时间: "+(endTime-startTime)+" ms");
}
}