tablica random, zwracająca zawsze sumę 0

0

Witam serdecznie,

mam takie pytanko. Jak utworzyć tablicę, której losowe elementy, zawsze zwrócą sumę równą 0. Dla przykładu

A[0]= -7
A[1]= 1 
A[2]= 5 
A[3]= 2 
A[4]= -4 
A[5]= 3 
A[6]= 0

A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0

A[6]= 0 zawsze jest takie same.

Tu nie chodzi o kod, tylko jakąś wskazówkę algorytmu , hmm ...

Zastanawiałam się nad takim sposobem. Dodać najpierw wszystkie losowe elementy tablicy. Tą sumę podzielić np przez 6 i zwróconą liczbę odjąć od każdego elementu...

Na razie mam coś takiego:

import java.util.*;

public class po1 {

    public static void main(String args[]) {
        Random generator = new Random();
        int[] tab = new int[6];
        int liczba = 0;
        int[] tab2 = new int[6];
        int licznik, zero, z, suma = 0;
        float srednia = 0;
        for (int i = 0; i < tab.length; i++) {
            tab[i] = generator.nextInt(10);

        }
        System.out.print("Tablica random: ");
        for (int i = 0; i < tab.length; i++) {
            suma = suma + tab[i];
            System.out.print(tab[i] + " ");

        }
        System.out.print(liczba);
        System.out.println("");
        srednia = (float) suma / 6;
        System.out.println("Suma elementów tablicy wynosi " + suma + " srednia: " + srednia);
        System.out.println(" ");

        tab2[0] = (int) tab[0] - (int) srednia;
        tab2[1] = (int) tab[1] - (int) srednia;
        tab2[2] = (int) tab[2] - (int) srednia;
        tab2[3] = (int) tab[3] - (int) srednia;
        tab2[4] = (int) tab[4] - (int) srednia;
        tab2[5] = (int) tab[5] - (int) srednia;

        System.out.print(tab2[0] + " " + tab2[1] + " " + tab2[2] + " " + tab2[3] + " " + tab2[4] + " " + tab2[5] + " ");

    }
}

Tylko niestety jeszcze moja druga tablica nie zwraca swojej sumy równiej 0 .. :(

Proszę uprzejmie o jakąś wskazówkę jak rozwiązać taki przykład. Tablica:

tab2[0]+tab2[1]+tab2[2]+tab2[3]+tab2[4]+tab2[5]=0 

ale jej wartości są zawsze losowane

0

Ciekawe? I z ciekawości to jakies zadanie czy cuś?
Coś podobnego: http://www.programowanie.7komputery.pl/detail/1903 - gdzieś tak w połowie jest proponowane rozwiązanie, tam bierze chyba udział nasz kolega z forum http://4programmers.net/Profile/30948 - może puść mu PM jak to się skończyło :)

1

A może tak: zakładasz, ze losujesz sobie te liczby z zakresu <-n, n> i losujesz je (dowolnie) do tablicy pod indeksy 0..4, na piątym wstawiasz taka liczbę, która spowoduje, że suma poprzednich plus ta nowo wstawiona bedzie rowna 0, no i na szostej pozycji zawsze 0 (skoro tak ma byc).

0

Najprościej, to tak:

        for (int i = 0; i < tab.length; i++) 
        {
            tab[i] = generator.nextInt(1);
        }
0

DZIĘKUJE SERDECZNIE ZA POMOC , DZIAŁA :) :) :)

kod przedstawia się w następujący sposób:

import java.util.*;

public class po1 {

    public static void main(String args[]) {
        Random generator = new Random();
        int[] tab = new int[6];
        int liczba = 0;
        int[] tab2 = new int[7];
        int suma = 0;
        for (int i = 0; i < tab.length; i++) {
            tab[i] = generator.nextInt(10) - 5;

        }

        System.out.print("Tablica random: ");
        for (int i = 0; i < tab.length; i++) {
            suma = suma + tab[i];
            System.out.print(tab[i] + " ");

        }
        System.out.print(liczba);
        System.out.println("");

        System.out.println("Suma elementów tablicy wynosi " + suma + " ");
        System.out.println(" ");

        tab2[0] = (int) tab[0];
        tab2[1] = (int) tab[1];
        tab2[2] = (int) tab[2];
        tab2[3] = (int) tab[3];
        tab2[4] = (int) tab[4];
        tab2[5] = (int) tab[5];
        tab2[6] = suma * (-1);

        System.out.print(tab2[0] + " " + tab2[1] + " " + tab2[2] + " " + tab2[3] + " " + tab2[4] + " " + tab2[5] + " " + tab2[6] + " ");

    }
}

a to wynik działania:

Tablica random: 1 -2 -5 -2 1 4 0
Suma elementów tablicy wynosi -3 
 
1 -2 -5 -2 1 4 3
0

Zgodnie z tym: Write a function int equi(int[] A); that given a sequence, returns its equilibrium index (any) or -1 if no equilibrium indexes exist. Assume that the sequence may be very long.?

0

Oczywiście i te 2 zadanie rozwiązałam :) :)

Założenia zadania całkowitego były następujące:

__1__
A[0]+A[1]+A[2]=A[4]+A[5]+A[6] 
__2__
A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0 

Dla takich przykładowych wartości:

A[0]= -7
A[1]= 1
A[2]= 5      
A[3]= 2  //--- tą wartość należało wyznaczyć 
A[4]= -4
A[5]= 3       
A[6]= 0

Mój sposób rozwiązania zadania przedstawia się następująco:

import java.util.*;

public class po1 {

    public static void main(String args[]) {
        Random generator = new Random();
        int[] tab = new int[6];
        int liczba = 0;
        int[] tab2 = new int[7];
        int suma_prawa = 0, suma_lewa = 0, suma = 0, rownowaznik = 0;
        for (int i = 0; i < tab.length; i++) {
            tab[i] = generator.nextInt(10) - 5;

        }

        System.out.print("Tablica random: ");
        for (int i = 0; i < tab.length; i++) {
            suma = suma + tab[i];
            suma_prawa = tab[0] + tab[1] + tab[2];
            suma_lewa = tab[4] + tab[5];
            rownowaznik = (suma_prawa + suma_lewa) * (-1);
            System.out.print(tab[i] + " ");

        }
        System.out.print(liczba);
        System.out.println("");

        System.out.println("Suma elementów tablicy wynosi " + suma + " ");
        System.out.println(" ");
      
        tab2[0] = (int) tab[0];
        tab2[1] = (int) tab[1];
        tab2[2] = (int) tab[2];
        tab2[3] = rownowaznik;
        tab2[4] = (int) tab[4];
        tab2[5] = (int) tab[5];
        tab2[6] = 0;

        System.out.print(tab2[0] + " " + tab2[1] + " " + tab2[2] + " " + tab2[3] + " " + tab2[4] + " " + tab2[5] + " " + tab2[6] + " ");

    }
}

P.S. źle zrozumiałam treść zadania, przepraszam.

0
  1. Miałabyś trochę większą szansę, żeby po samym losowaniu suma była zero, gdybyś losowała symetrycznie:
        for (int i = 0; i < tab.length; i++) {
            tab[i] = generator.nextInt(11) - 5;
        }
  1. Po jakiego grzyba rzutujesz?
  tab2[0]=(int) tab[0];
  1. Jak tablica tab2 jest losowa, to ja jestem osesek. Moim zdaniem, albo autor zadania jest ignorantem, albo oczekuje odpowiedzi typu to jest niemożliwe.
0

ups zapomniałam o tym nie potrzebnym rzutowaniu . Już usunęłam. Tylko autor się nie określił, z jakiego zakresu mają być losowane liczby , w przykładzie jedynie było pokazane, że są tam wartości ujemne. Testowałam kilka razy , dla takiej wartości :

 tab[i] = generator.nextInt(11) - 5;

Wyniki, również są poprawne.

Wartości są również losowane dla pierwszej tab, a następnie przypisane wiec chyba jest dobrze? W tym indeksie

tab2[3] = rownowaznik;

jest wyznaczany element, aby spowodował wyzerowanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1