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.