#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.