Ohjelmassa otetaan joka kierroksella joka toinen luku pois, kunnes lukuja ei enää ole.
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. } } }
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ä.
Sama ohjelma Pythonilla:
luvut = [i + 1 for i in range(100)] while luvut: luvut = luvut[::2] print(luvut)
Aihe on jo aika vanha, joten et voi enää vastata siihen.