设计程序,计算你能获得的最大收益。
输入数值范围:2<=n<=100,0<=prices[i}<=100
(C或Java实现)
输入例子:3, 8, 5, 1, 7, 8
输出结果:12
代码如下:
package practice1;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class forff {
public static void main(String[] args) {
int n = 11;
int[][] a = {{2,4,8,1,109,7,2,9,4,110,110},{0,1,2,3,4,5,6,7,8,9,10}};
//int[][] a = {{2,4,8,1,109,7,4,6,2,110},{0,1,2,3,4,5,6,7,8,9}};
/*int n = 8;
int[][] a = {{3,5,1,7,22,1,5,3}, {0,1,2,3,4,5,6,7}};
int n = 6;
int[][] a = {{3,8,5,1,7,8},{0,1,2,3,4,5}};
*/
/*
* for(int i=0;i<2;i++) for(int j=0;j<n;j++){ a[i][j]=new
* Scanner(System.in).nextInt(); }
*/
//排序:从大到小
for (int i = 0; i < n; i++) {
for (int j = 1; j < n - i; j++) {
if (a[0][j] > a[0][j - 1]) {
int b = a[0][j];
a[0][j] = a[0][j - 1];
a[0][j - 1] = b;
b = a[1][j];
a[1][j] = a[1][j - 1];
a[1][j - 1] = b;
}
}
}
List<Integer> sum1 =new ArrayList<Integer> () ,/*sum1记录可收益所有可能*/
sum2 = new ArrayList<Integer>(),/*sum2记录可收益所有可能时的最高股价下标*/
sum3=new ArrayList<Integer>();/*sum3记录可收益所有可能时的买入股价下标*/
for (int i = 0; i < n; i++) {
int c = n-1;
while (c > i) {
if (a[1][i] > a[1][c]) {//有收益
sum1.add(a[0][i] - a[0][c]);/*sum1记录可收益所有可能*/
sum2.add(a[1][i]);/*sum2记录可收益所有可能时的最高股价下标*/
sum3.add(a[1][c]);/*sum3记录可收益所有可能时的买入股价下标*/
}
c--;
}
}
List<Integer> totalSum=new ArrayList<Integer>();//记录两次卖出的总收益所有可能组合
for (int i = 0; i < sum1.size(); i++) {
List<Integer> sum = new ArrayList<Integer>();//记录一次for循环产生的一组可能组合
for (int j = 0; j < sum2.size(); j++) {
if (sum3.get(j) >sum2.get(i)) {//第二次买入时的下标必须大于第一次卖出的下标
sum.add(sum1.get(j) +sum1.get(i));
}
}
totalSum.addAll(sum);
}
Collections.sort(totalSum);//排序
System.out.println(totalSum.get(totalSum.size()-1));//输出
}
}
便于观察结果:
import java.util.Scanner;
public class forff {
public static void main(String[] args) {
/*int n = 10;
int[][] a = {{2,4,8,1,110,7,4,6,1,110},{0,1,2,3,4,5,6,7,8,9}};
int n = 8;
int[][] a = {{3,5,1,7,22,1,5,3}, {0,1,2,3,4,5,6,7}};
*/ int n = 6;
int[][] a = {{3,8,5,1,7,8},{0,1,2,3,4,5}};
/*
* for(int i=0;i<2;i++) for(int j=0;j<n;j++){ a[i][j]=new
* Scanner(
).nextInt(); }
*/
for (int i = 0; i < n; i++) {
for (int j = 1; j < n - i; j++) {
if (a[0][j] > a[0][j - 1]) {
int b = a[0][j];
a[0][j] = a[0][j - 1];
a[0][j - 1] = b;
b = a[1][j];
a[1][j] = a[1][j - 1];
a[1][j - 1] = b;
}
}
}
String sum1 = "", sum2 = "",sum3="";
for (int i = 0; i < n; i++) {
int c = n-1;
while (c > i) {
if (a[1][i] > a[1][c]) {
if (sum1.equals("")) {
sum1 = "" + (a[0][i] - a[0][c]);
sum2 = "" + a[1][i];
sum3 = "" + a[1][c];
} else {
sum1 = sum1 + "," + (a[0][i] - a[0][c]);
sum2 = sum2 + "," + a[1][i];
sum3 = sum3 +"," + a[1][c];
}
}
c--;
}
}
System.out.println(sum1);
System.out.println(sum2);
System.out.println(sum3);
String[] s1 = sum1.split(",");
String[] s2 = sum2.split(",");
String[] s3 = sum3.split(",");
String totalSum="";
for (int i = 0; i < s1.length; i++) {
String sum = "";
for (int j = 0; j < s2.length; j++) {
if (Integer.parseInt(s3[j]) > Integer.parseInt(s2[i])) {
if (sum.equals("")) {
sum = "" + (Integer.parseInt(s1[j]) + Integer.parseInt(s1[i]));
} else {
sum = sum + "," + (Integer.parseInt(s1[j]) + Integer.parseInt(s1[i]));
}
}
}
System.out.println(sum);
if(totalSum.equals("")){
totalSum=sum;
}else{
if(sum.equals(""));
else
totalSum=totalSum+","+sum;
}
}
String[] tot=totalSum.split(",");
int max=Integer.parseInt(tot[0]);
for(int i=1;i<tot.length;i++){
if(max<Integer.parseInt(tot[i]))
max=Integer.parseInt(tot[i]);
}
System.out.println(max);
}
}