Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Java: Joka toinen luku pois

JRokka [07.11.2019 21:49:56]

#

Ohjelmassa otetaan joka kierroksella joka toinen luku pois, kunnes lukuja ei enää ole.

Koodi

public class Joka_toinen_luku {
    public static void main(String[] args){
        int[] luvut = new int[100];
        int[] luvut_2 = new int[100];
        int indeksi = luvut.length;
        int a = 0;
        boolean onko = false; //Tällä katsotaan, tallennetaanko luku.
        //Lisätään luvut 0-100.
        for (int x = 0; x < 100; x++){
            luvut[x] = x+1;
        }
        //Otetaan, joka kierroksella joka toinen luku pois.
        //Joka toinen luku tallennetaan jatkoa varten.
        //Jatketaan niin kauan kunnes kaikki luvut on otettu pois.
        while (indeksi >= 2){
            a = 0; //Tällä lasketaan tallennettavien lukujen määrä.
            for (int x = 0; x < indeksi; x++){
                if (onko == false){
                    //Ei tallenneta lukua.
                    onko = true;
                }
                else {
                    //Tallennetaan tallennettava luku toiseen taulukkoon.
                    luvut_2[a] = luvut[x];
                    onko = false;
                    a++;
                }
            }
            //Katsotaan, mitä lukuja jäi talteen.
            //Tallennetaan luvut-taulukkoon seuraavan kierroksen luku.
            for (int x = 0; x < a; x++){
                luvut[x] = luvut_2[x];
                System.out.println(luvut[x]);
            }
            System.out.println("---");
            indeksi /= 2; //Lukuja on seuraavalla kierroksella puolet vähemmän.

        }
    }
}

Teuro [08.11.2019 15:25:38]

#

Vaikuttaa aavistuksen vaikealta toteutukselta, jos tarvitaan vain joka toinen luku pois listasta. Käytät tässä jostakin syystä taulukkoa, vaikka arraylist olisi mielestäni joustavampi.

import java.util.ArrayList;

public class Joka_toinen_luku {
    public static void main(String[] args) {
        int koko = 100;

        ArrayList <Integer> luvut = new ArrayList <Integer> (koko);

        for (int x = 0; x < koko; x++) {
            luvut.add(x + 1);
        }

        while (luvut.size() > 1){
            for (int i = 0; i < luvut.size(); ++i) {
                luvut.remove(i);
            }

            System.out.println(luvut);
        }
    }
}

Esimerkkikoodisi tulostaa minusta väärän tuloksen. Koodisi ei aloita lukujen poistamista aina ensimmäisestä indeksistä.

Tronic [10.11.2019 08:48:07]

#

Sama ohjelma Pythonilla:

luvut = [i + 1 for i in range(100)]
while luvut:
    luvut = luvut[::2]
    print(luvut)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta