OIá, estou começando em programação e preciso de ajuda. Preciso fazer um programa que colete numeros no Vetor A e mova os numeros organizados de forma crescente para o Vetor C. Conforme exemplo abaixo.
Brother, qual o enunciado correto do problema, pois, só pelas imagens e o que você descreveu, tem algum ponto faltando.
Pois, é relativamente simples fazer isso, mesmo com vetores.
O enunciado é esse “Faça um programa em Java com 3 vetores (A,B,C) no qual será inserido pelo usuário 10 valores no vetor A desordenadamente, você deve ordenar o vetor A de forma crescente e mover os valores para o vetor C de forma que os números sempre esteja ordenados. Abaixo segue os exemplos dos movimentos entre os vetores. (Utilize vetores, ordenação para o estado inicial do vetor A, e função).”
Sobre a organização realmente é tranquilo, o que ta me quebrando é saber como vou passar eles da maneira da foto.
Os momentos não estão corretos. Há saltos em alguns (por exemplo do 3 para o 4 foram movidos 2 números, assim como do 4 para o 5 ou do 6 para o 7)
De qualquer forma isto é o problema da torre de Hanoi disfarçado e so tens de mover os números na direção correta.
Sobre o algoritmo, é como nosso colega já disse, trata-se de uma explicação complicada para o problema das Torres de Hanói, ou Torres de Brahma:
No grande templo de Brahma em Benares, numa bandeja de metal sob a cúpula que marca o centro do mundo, três agulhas de diamante servem de pilar a sessenta e quatro discos de ouro puro.
Incansavelmente, os sacerdotes transferem os discos, um de cada vez, de agulha para agulha, obedecendo sempre à lei imutável de Brahma: Nenhum disco se poderá sobrepor a um menor.
No início do mundo todos os sessenta e quatro discos de ouro, foram dispostos na primeira das três agulhas, constituindo a Torre de Brahma.
No momento em que o menor dos discos for colocado de tal modo que se forme uma vez mais a Torre de Brahma numa agulha diferente da inicial, tanto a torre como o templo serão transformados em pó e o ribombar de um trovão assinalará o fim do mundo.
static int a[] = new int[10]; // Números desordenados
static int b[] = new int[10];
static int c[] = new int[10];
public static void main(String[] args) {
// recebe os números digitados pelo usuário
for (int i = 0; i < a.length; i++) {
a[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite os números: "));
}
int aux;
for (int i = 0; i < a.length; i++) {
for (int j = 1; j < a.length; j++) {
if (a[j - 1] > a[j]) {
aux = a[j];
a[j] = a[j - 1];
a[j - 1] = aux;
}
}
}
}
eu coloquei Arrays.toString, mas não é essa. é a Arrays.sort();
seu código ficaria assim:
public static void main(String[] args) {
// recebe os números digitados pelo usuário
for (int i = 0; i < a.length; i++) {
a[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite os números: "));
}
c = Arrays.sort(a);
System.out.println(Arrays.toString(c));
Mas nesse caso é apenas para cortar caminho. vc quer a torre C alinhada do menor para o maior. a torre de hanoi é um processo de algoritimo
Olá pessoal, estou fazendo a torre de maneira recursiva. Como já disse sou iniciante e imagino que possua diversos erros. Mas basicamente o que fiz foi pedir ao usuário números desordenados na Main, depois disso criei 1 subrotina para ordenar os números em A e depois disso uma rotina para que de fato se resolva a torre de Hanói de maneira recursiva. Porem ainda não está funcionando, podem verificar onde está o erro e me ajudar?
import javax.swing.JOptionPane;
public class Trabalho1 {
static int a[] = new int[10]; // Números desordenados
static int b[] = new int[10];
static int c[] = new int[10];
public static void main(String[] args) {
// recebe os números digitados pelo usuário
for (int i = 0; i < a.length; i++) {
a[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite os números: "));
organizaA();
resolvehanoi();
}
}
public static void organizaA() {
int aux;
for (int i = 0; i < a.length; i++) {
for (int j = 1; j < a.length; j++) {
if (a[j - 1] > a[j]) {
aux = a[j];
a[j] = a[j - 1];
a[j - 1] = aux;
}
}
}
}
public static void resolvehanoi() {
int qtda;
int qtdb;
int qtdc;
if (qtda == 0 && qtdb == 0) {
exibir();
}
if (a[qtda - 1] > 0 && a[qtda - 1] < b[qtdb - 1]) {
a[qtda - 1] = b[qtdb];
qtda--;
qtdb++;
} else {
a[qtda - 1] = c[qtdc];
}
if (b[qtdb - 1] > 0 && b[qtdb - 1] < c[qtdc - 1]) {
b[qtdb - 1] = c[qtdc];
qtdb--;
qtdc++;
} else {
a[qtda - 1] = b[qtdb];
qtda--;
qtdb++;
}
if (c[qtdc - 1] > 0 && c[qtdc - 1] < a[qtda - 1]) {
c[qtdc - 1] = a[qtda];
qtdc--;
qtda++;
} else {
c[qtdc - 1] = b[qtdb];
qtdc--;
qtdb++;
}
else{
b[qtdb-1] = a[qtda];
qtdb--;
qtda++;
}
}
public static void exibir() {
for (int i = 0; i > c.length; i++) {
System.out.println("Os números em C São: " + c[i]);
}
}