#include <iostream> using namespace std; int main(){ int luvut[] = {1,5,4,8,64,4096,1,1,1,390625}; int alku = 0; int loppu = 0; int indeksi = 0; bool onko = false; bool onko_2 = false; for (int x = 0; x < 10; x++){ //Oletetaan, että on neliöjono kunnes toisin todistetaan. //Neliöjonon tulee olla mahdollisimman pitkä. //Neliöjonossa seuraava luku on edellisen neliö. int y = x+1; onko = true; onko_2 = false; while (y < 10 && onko == true){ if (luvut[y] != luvut[y-1]*luvut[y-1]){ onko = false; } else { //Tallennetaan tiedot. onko_2 = true; alku = x; loppu = y; indeksi = y; } y++; } if (onko_2 == true){ //Tulostetaan neliöjono. for (int y = alku; y <= loppu; y++){ cout << luvut[y] << endl; } x = indeksi; cout << "" << endl; } } return 0; }
Sinun on nyt oikeasti opeteltava eroon noista while-onko-viritelmistä. Varsinkin muuttujan nimi ”onko” on aivan pöljä. Onko mitä? Laitan viestin lähetykseen filtterin tätä ongelmaa vastaan.
Tässä on vielä kerran pari vaihtoehtoa.
Ensinnäkin lukujen määrä olisi hyvä nimetä; maaginen 10 koodissa on epäselvä.
const int luvut[] = {2, 4, 16, 256, 3, 5, 25, 125, 7, 49}; const int lukuja = sizeof(luvut) / sizeof(luvut[0]);
Lyhyt versio:
for (int a = 0, b; a < lukuja; a = b) { for (b = a + 1; b < lukuja && luvut[b] == luvut[b-1] * luvut[b-1]; ++b); if (b - a > 1) { std::cout << luvut[a++]; while (a < b) { std::cout << ", " << luvut[a++]; } std::cout << std::endl; } }
Haku- ja tulostussilmukat voi myös yhdistää:
for (int a = 0, b; a < lukuja; a = b) { bool tulostettu = false; for (b = a + 1; b < lukuja && luvut[b] == luvut[b-1] * luvut[b-1]; ++b) { if (b == a + 1) { std::cout << luvut[a]; } std::cout << ", " << luvut[b]; tulostettu = true; } if (tulostettu) { std::cout << std::endl; } }
Viimeisenkin silmukan voi yhdistää:
for (int i = 1, jonossa = 0; i < lukuja; ++i) { bool jono_loppuu = i == lukuja - 1; if (luvut[i] != luvut[i-1] * luvut[i-1]) { jono_loppuu = true; } else { if (jonossa == 0) { jonossa = 1; std::cout << luvut[i-1]; } jonossa += 1; std::cout << ", " << luvut[i]; } if (jonossa && jono_loppuu) { jonossa = 0; std::cout << std::endl; } }
Aihe on jo aika vanha, joten et voi enää vastata siihen.