Então galera, é o seguinte. O programa tem que resolver uma sequência de conversão de moedas especificadas, quando eu rodo no prompt, ele retorna certinho, porém quando eu envio pro uva judge (104), ele retorna runtime error. Algúem pode me ajudar? Segue meu codigo a baixo:
import java.util.Scanner;
public class Main {
static int MAX = 20;
static double LUCRO_MIN = 1.01;
public static void main(String[] args) {
int n, i, j;
double v;
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
double[][] W = new double [MAX][MAX];
n = sc.nextInt();
sc.nextLine();
for(i = 0; i < n; i++) {
int pos = 0;
String linha = sc.nextLine();
String vertice[] = linha.split(" ");
for(j = 0; j < n; j++) {
if(i == j) {
W= 0; continue; } v = Double.parseDouble(vertice[pos]); W[j] = v; pos++; } } Converte(n, W); } }
static public void Imprime (int i, int j, int l, int P[][][]) { if(l == 0) System.out.printf ("%d\n", i + 1); else { System.out.printf ("%d ", i + 1); int x = P[l][j]; Imprime (x, j, l - 1, P); } }
static void IniZero (int n, double m[][][], int l) { int i, j; for(i = 0; i < n; i++) for(j = 0; j < n; j++) m[l][j] = 0; }
static void Converte(int n, double W[][]) { double[][][] B = new double [MAX][MAX][MAX]; int [][][]P = new int [MAX][MAX][MAX]; int l, i, j, k; for(i = 0; i < n; i++) for(j = 0; j < n; j++) { B[1][j] = W[j]; if(W[j] > 0) P[1][j] = j; } for(l = 2; l <= n; l++) { IniZero(n, B, l); for(i = 0; i < n; i++) for(j = 0; j < n; j++) for(k = 0; k < n; k++) { if(B[l][j] < W[k] * B[l-1][k][j]) { B[l][j] = W[k] * B[l-1][k][j]; P[l][j] = k; if(B[l]>= LUCRO_MIN) { Imprime(i, i, l, P); return; } } } } System.out.printf("no arbitrage sequence exists\n"); } }
Pergunta
juny
Então galera, é o seguinte. O programa tem que resolver uma sequência de conversão de moedas especificadas, quando eu rodo no prompt, ele retorna certinho, porém quando eu envio pro uva judge (104), ele retorna runtime error. Algúem pode me ajudar? Segue meu codigo a baixo:
import java.util.Scanner;
public class Main {
static int MAX = 20;
static double LUCRO_MIN = 1.01;
public static void main(String[] args) {
int n, i, j;
double v;
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
double[][] W = new double [MAX][MAX];
n = sc.nextInt();
sc.nextLine();
for(i = 0; i < n; i++) {
int pos = 0;
String linha = sc.nextLine();
String vertice[] = linha.split(" ");
for(j = 0; j < n; j++) {
if(i == j) {
W = 0;
continue;
}
v = Double.parseDouble(vertice[pos]);
W[j] = v;
pos++;
}
}
Converte(n, W);
}
}
static public void Imprime (int i, int j, int l, int P[][][]) {
if(l == 0)
System.out.printf ("%d\n", i + 1);
else {
System.out.printf ("%d ", i + 1);
int x = P[l][j];
Imprime (x, j, l - 1, P);
}
}
static void IniZero (int n, double m[][][], int l) {
int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
m[l][j] = 0;
}
static void Converte(int n, double W[][]) {
double[][][] B = new double [MAX][MAX][MAX];
int [][][]P = new int [MAX][MAX][MAX];
int l, i, j, k;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++) {
B[1][j] = W[j];
if(W[j] > 0)
P[1][j] = j;
}
for(l = 2; l <= n; l++) {
IniZero(n, B, l);
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
for(k = 0; k < n; k++) {
if(B[l][j] < W[k] * B[l-1][k][j]) {
B[l][j] = W[k] * B[l-1][k][j];
P[l][j] = k;
if(B[l] >= LUCRO_MIN) {
Imprime(i, i, l, P);
return;
}
}
}
}
System.out.printf("no arbitrage sequence exists\n");
}
}
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.