Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Lekcja 30 zadanie 2

Ostatnio zmodyfikowano 2016-09-17 00:07
Autor Wiadomość
Shadow7
Temat założony przez niniejszego użytkownika
Lekcja 30 zadanie 2
» 2016-09-16 14:39:32
Witam, kompletnie nie mam pomysłu na zadanie 2 z lekcji 30...
http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Zagniezdzanie-petli/347
Udało mi się zrobić wariacje bez powtórzeń, ale nie kombinacje...
Nie mam pojęcia jak to bez używania wektorów ugryźć. Proszę o wskazówki


#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
int main()
{
    for (int p1 = 1; p1 < 6; p1++) {
        for (int p2 = 1; p2 < 6; p2++) {
            if (p2 == p1) {
                continue;
            }
            for (int p3 = 1; p3 < 6; p3++) {
                if (p3 == p1 || p3 == p2) {
                    continue;
                }
                cout << p1 << p2 << p3 << endl;
            }
        }
    }
 
    return 0;
}
P-151754
mateczek
» 2016-09-16 16:15:17
C/C++
#include <iostream>
using namespace std;

int main()
{
    int iloscKobinacji = 0;
    const int n = 6;
    for( int p1 = 1; p1 <= n - 2; p1++ ) {
        for( int p2 = p1 + 1; p2 <= n - 1; p2++ ) { //startujesz od następnej po p1;
            for( int p3 = p2 + 1; p3 <= n; p3++ ) { //startujesz od następnej po p2
                iloscKobinacji++;
                cout << p1 << " " << p2 << " " << p3 << endl;
            }
        }
    }
    cout << "bylo: " << iloscKobinacji << " kombinacji  " << endl;
    //(6*5*4)/(1*2*3)=20
}

Tu masz na stałe generować trójki . A Jak chcesz powalczyć to napisz program aby użytkownik zadawał oba parametry. czyli  ile i z ilu. :P
P-151757
igawar
Lekcja 30 zadanie 4
» 2016-09-16 23:15:50
"Napisz program, który zliczy liczbę możliwych kombinacji wylosowania 6 liczb ze zbioru 49 liczb (reasumując: rozpatrujesz problem popularnej gry liczbowej Lotto). Zadanie należy rozwiązać przy pomocy zagnieżdżonych pętli (nie można używać wzoru)."

Napisałam:
C/C++
#include <iostream>
using namespace std;

int main()
{
    int iloscKombinacji = 0;
    int p1, p2, p3, p4, p5, p6;
    const int n = 49;
    for( p1 = 1; p1 <= n - 5; p1++ )
    { for( p2 = p1 + 1; p2 <= n - 4; p2++ )
        for( p3 = p2 + 1; p3 <= n - 3; p3++ )
        for( p4 = p3 + 1; p4 <= n - 2; p4++ )
        for( p5 = p4 + 1; p5 <= n - 1; p5++ )
        for( p6 = p5 + 1; p6 <= n; p6++ )
        {
            iloscKombinacji++;
            cout << p1 << " " << p2 << " " << p3 << " " << p4 << " " << p5 << " " << p6 << endl;
        }
    }
    cout << "iloscKombinacji= " << iloscKombinacji << endl;
    //(49*48*47*46*45*44)/(1*2*3*4*5*6)=13.983.816
}
"Weryfikacja poprawności zadania
Jeżeli uzyskana wartość mieści się w przedziale od 12 do 15 milionów to znaczy, że poprawnie rozwiązałeś zadanie. "

Niestety nie czekałam aż wypisze ilośćKombinacji, za długo by to trwało ale mam nadzieję, że dobrze napisałam.
P-151765
Gibas11
» 2016-09-16 23:51:12
@Up
Jeśli pominiesz wyświetlanie w pętli i zostawisz samą inkrementację kompilator skrajnie to zoptymalizuje wywalając wszelkie pętle. A wynik wyszedł dokładnie taki jaki podałaś w komentarzu w kodzie.
P-151766
igawar
» 2016-09-16 23:59:25
Zgadza się. Dałam // przed cout <<p1<<" "<<p2<<" "<<p3<<" "<<p4<<" "<< p5<<" "<< p6 <<endl i wyszedł wynik taki jak trzeba :)

A jak wkleić kod programu, żeby tak ładnie wyglądał? Ja dałam "["code"]" ... "[/code]" to wyszło tak na czarnym tle.
P-151768
mateczek
» 2016-09-17 00:03:22
[cpp]
//tutaj kod
[/cpp]
P-151771
igawar
» 2016-09-17 00:07:29
dzięki mateczek i Gibas11. Wszystko się zgadza :) :)
P-151772
« 1 »
  Strona 1 z 1