#1 marek17
Když jsou ty Vánoce, tak dám i řešení (ačkoliv to normálně nedělám). Nevím úplně, jestli jsem zadání pochopil zcela správně, protože pokud poslední číslo má odpovídat 6. řadě, pak v příkladech chybně končí 105 namísto 100, kterou by měla končit. Ale hádám, že s tím už si případně poradíte.
Kombinatorické úlohy se obvykle nejsnáze řeší pomocí rekurze, takže zde je rozšiřitelné řešení jdoucí touto cestou. Pokud byste rekurzi nechtěl, musel byste vnořit 6 cyklů do sebe - takovém případě už se ale snadno nedá změnit počet řádů.
#include <iostream>
void vytiskniRadu(
const int pocet_radu_,
int hodnoty_[]) {
bool prvni_(true);
for(int i_(0); i_ < pocet_radu_; ++i_) {
if(prvni_)
prvni_ = false;
else
std::cout << "-";
std::cout << hodnoty_[i_];
}
std::cout << std::endl;
}
void generujRadu(
const int rad_,
const int pocet_radu_,
const int limity_[],
int hodnoty_[]) {
if(rad_ == pocet_radu_) {
vytiskniRadu(pocet_radu_, hodnoty_);
}
else {
for(int i_(0); i_ <= limity_[rad_]; ++i_) {
hodnoty_[rad_] = i_;
generujRadu(rad_ + 1, pocet_radu_, limity_, hodnoty_);
}
}
}
int main(
int argc_,
char* argv_[]) {
enum { RADU = 6 };
const int limity_[RADU] = {105, 104, 100, 100, 104, 100};
int hodnoty_[RADU];
generujRadu(0, RADU, limity_, hodnoty_);
return 0;
}