帮我用java翻译如下代码:#include<stdio.h> int max(double* a,int n) { int rmax=0; for(int i=1;i<n;i++) { if(a[i]>a[rmax]) { rmax=i; } } return rmax; } int main() { int M,n; scanf("%d",&M); scanf("%d",&n); int w[100000];//商品重量 int p[100000];//商品效益 double a[100000]; //单位重量的商品效益 double answer[100000]; float cost=0; for(int i=0;i<n;i++) { scanf("%d",&w[i]); } for(int i=0;i<n;i++) { scanf("%d",&p[i]); } for(int i=0;i<n;i++) { a[i]=(double)p[i]/w[i]; } int j; for(int i=0;i<n;i++) { j=max(a,n); if(w[j]<=M) { answer[j]=1; cost+=p[j]; a[j]=0; M=M-w[j]; } else break; } answer[j]=(double)M/w[j]; cost+=answer[j]*p[j]; printf("%g\n",cost); for(int i=0;i<n-1;i++) { printf("%.2lf ",answer[i]); } printf("%.2lf",answer[n-1]); return 0; }
时间: 2024-03-07 22:50:46 浏览: 19
这是一段C语言代码,实现了一个背包问题的解决方案。下面是Java代码的翻译:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt(); // 背包容量
int n = sc.nextInt(); // 商品数量
int[] w = new int[100000]; // 商品重量
int[] p = new int[100000]; // 商品效益
double[] a = new double[100000]; // 单位重量的商品效益
double[] answer = new double[100000]; // 商品选择情况
float cost = 0; // 花费
for (int i = 0; i < n; i++) {
w[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
p[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
a[i] = (double) p[i] / w[i];
}
int j = 0;
for (int i = 0; i < n; i++) {
j = findMax(a, n);
if (w[j] <= M) {
answer[j] = 1;
cost += p[j];
a[j] = 0;
M = M - w[j];
} else {
break;
}
}
answer[j] = (double) M / w[j];
cost += answer[j] * p[j];
System.out.println(cost);
for (int i = 0; i < n - 1; i++) {
System.out.printf("%.2f ", answer[i]);
}
System.out.printf("%.2f", answer[n - 1]);
}
public static int findMax(double[] a, int n) {
int rmax = 0;
for (int i = 1; i < n; i++) {
if (a[i] > a[rmax]) {
rmax = i;
}
}
return rmax;
}
}
```