我不习惯在java中编码所以我需要帮助将这段代码从功能方式转换为从c ++到java。我自己尝试过,但结果总是为0.这是剪切棒问题。
#include <iostream>
#define MAXINT 2147483647
#define NCUTS 50
using namespace std;
int main() {
int len;
int nc;
int arr[NCUTS+2];
int dp[NCUTS+2][NCUTS+2];
while((cin >> len) && (len != 0)) {
cin >> nc;
for(int i=0; i<nc; i++) {
cin >> arr[i+1];
}
arr[0] = 0;
nc++;
arr[nc] = len;
for(int i=0; i<=NCUTS+1; i++) {
for(int j=0;j<=NCUTS+1;j++) {
dp[i][j] = MAXINT;
}
}
for(int i=0; i<=nc; i++) {
dp[i][i] = 0;
dp[i][i+1] = 0;
dp[i][i+2] = arr[i+2] - arr[i];
}
for(int k=3; k<=nc; k++) {
for(int i=0; i<=nc-k; i++) {
for(int j=i+1; j<=i+k-1; j++) {
if((dp[i][j] + dp[j][i+k] + arr[i+k] - arr[i]) < dp[i][i+k]) {
dp[i][i+k] = dp[i][j] + dp[j][i+k] + arr[i+k] - arr[i];
}
}
}
}
cout << "The minimum cutting is "<< dp[0][nc] << "." << endl;
}
}
答案 0 :(得分:2)
我不会发布完整的翻译,但是C ++和Java之间的一些具体差异将与此相关:
public class CuttingSticks
。#define NAME value
替换为private static final
,例如private static final int NAME = value;
。MAXINT
只是Integer.MAX_VALUE
。public static void main(String[] args)
,即使您不使用args
。int[] arr = new int[NCUTS+2]
。没有2D数组,只有“数组数组”(您需要分配外部数组,然后为每个内部数组分配另一个数组)。或者,手动编写自己的矩形阵列。cin
而不是System.in
。这是InputStream。cout
而不是System.out
。这是PrintStream - 通常您只需使用System.out.println
。答案 1 :(得分:1)
import java.io.*;
import java.util.*;
class MyClass {
static final int MAXINT = Integer.MAX_VALUE;
static final int NCUTS = 50;
public static void main (String [] args) throws IOException {
int len;
int nc;
int[] arr = new int[NCUTS+2];
int[][] dp = new int[NCUTS+2][NCUTS+2];
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while((len = Integer.parseInt(in.readLine())) != 0) {
nc = Integer.parseInt(in.readLine());
for(int i=0; i<nc; i++) {
arr[i+1] = Integer.parseInt(in.readLine());
}
arr[0] = 0;
nc++;
arr[nc] = len;
for(int i=0; i<=NCUTS+1; i++) {
for(int j=0;j<=NCUTS+1;j++) {
dp[i][j] = MAXINT;
}
}
for(int i=0; i<=nc; i++) {
dp[i][i] = 0;
dp[i][i+1] = 0;
dp[i][i+2] = arr[i+2] - arr[i];
}
for(int k=3; k<=nc; k++) {
for(int i=0; i<=nc-k; i++) {
for(int j=i+1; j<=i+k-1; j++) {
if((dp[i][j] + dp[j][i+k] + arr[i+k] - arr[i]) < dp[i][i+k]) {
dp[i][i+k] = dp[i][j] + dp[j][i+k] + arr[i+k] - arr[i];
}
}
}
}
System.out.println("The minimum cutting is " + dp[0][nc] + ".");
}
}
}