Program do obliczania ruchów kostką do gry..

0

Cześć

Mam do wykonania zadanie.. zacząłem to pisać ale coś mi nie wychodzi ;-(

Treść zadania:

Komputer pyta użytkownika o ilość kostek (od 1 do 1000), a potem o liczbę wyrzuconych oczek na każdej z kostek. Komputer podaje najmniejszą liczbę ruchów jakie należy wykonać, żeby liczba oczek na wszystkich kostkach była taka sama. Ruch polega na obrocie kostki o 90 stopni. Należy pamiętać, że na przeciwległych ściankach każdej kostki liczba oczek wynosi 7. Bez użycia tablic, ani innych zmiennych złożonych. Najlepiej użyć zmiennej int.

Kod, który już napisałem jednak nie działa jak powinien.

#include <iostream>
#include <ctime>
#include <cstdlib> 

using namespace std;

int cubeAmount = 0; // Liczba podanych kostek

int c1 = 0; // Ilosc wyrzuconych oczek o liczbie 1
int c2 = 0; // Ilosc wyrzuconych oczek o liczbie 2
int c3 = 0; // Ilosc wyrzuconych oczek o liczbie 3
int c4 = 0; // Ilosc wyrzuconych oczek o liczbie 4
int c5 = 0; // Ilosc wyrzuconych oczek o liczbie 5
int c6 = 0; // Ilosc wyrzuconych oczek o liczbie 6

int mostOftenDrawnCubeNumber; // Liczba kostek z oczkiem, ktore zostalo najczesciej wylosowane
int revertC = 0; // Ilosc przeciwleglych wylosowanych oczek w odniesieniu do najczesciej wylosowanej wartosci

void getCubeAmount() {
	
	while (cubeAmount == 0)
    {
    	cout << "Wpisz liczbe kostek [1-1000]: ";
    	std::cin >> cubeAmount;
    		
    	if(cubeAmount > 1000) {
    		cout << "Liczba zbyt duza, wpisz ponownie.\n";
    		cubeAmount = 0;
		} else if(cubeAmount < 1) {
			cout << "Liczba zbyt mala, wpisz ponownie.\n";
    		cubeAmount = 0;
		}
    }
    
}

void getSingleCubeValue() {

	int i = 1;
    
    while (i <= cubeAmount) {
    	
    	int value = 0;
    	
    	cout << "Wpisz liczbe oczek dla Kostki " << i << " [1-6]: ";
    	std::cin >> value;
    	
    	if(value > 6) {
    		cout << "Liczba zbyt duza, wpisz ponownie.\n";
		} else if(value < 1) {
			cout << "Liczba zbyt mala, wpisz ponownie.\n";
		} else {
			switch(value) {
	    		case 1:
	    			c1++;
	    			break;
	    		case 2:
	    			c2++;
	    			break;
	    		case 3:
	    			c3++;
	    			break;
	    		case 4:
	    			c4++;
	    			break;
	    		case 5:
	    			c5++;
	    			break;
	    		case 6:
	    			c6++;
	    			break;
			}
    	
    		i++;	
		}
    	
	}
	
}

void getMostOftenDrawnCubeNumber() {
	
	if(c1 > mostOftenDrawnCubeNumber) {
		mostOftenDrawnCubeNumber = c1;
		revertC = c6;
	}
	
	if(c2 > mostOftenDrawnCubeNumber) {
		mostOftenDrawnCubeNumber = c2;
		revertC = c5;
	}
	
	if(c3 > mostOftenDrawnCubeNumber) {
		mostOftenDrawnCubeNumber = c3;
		revertC = c4;
	}
	
	if(c4 > mostOftenDrawnCubeNumber) {
		mostOftenDrawnCubeNumber = c4;
		revertC = c3;
	}
	
	if(c5 > mostOftenDrawnCubeNumber) {
		mostOftenDrawnCubeNumber = c5;
		revertC = c2;
	}
	
	if(c6 > mostOftenDrawnCubeNumber) {
		mostOftenDrawnCubeNumber = c6;
		revertC = c1;
	}
	
}

void getLowestCubeThrownNumber() {
	
	int throwsAmount = c1 * 1 + c2 * 1 + c3 * 1 + c4 * 1 + c5 * 1 + c6 * 1 + revertC * 2;
	
	cout << "Najmniejsza liczba ruchow to: " << throwsAmount;
	
}

int main ()
{
    
    cout << "Kostka 1.0!\n\n";
    
    getCubeAmount();
    getSingleCubeValue();
    getMostOftenDrawnCubeNumber();
	getLowestCubeThrownNumber();
	    
    return 0;
    
}

0
  1. zmienne globalne to samo zło.
  2. a co z kostkami, których nie trzeba obracać?
  3. poza tym maksymalna liczba ruchów na kostkę to 2 a nie 3.

czyli problem jest w getLowestCubeThrownNumber.

Jest jeszcze taki zestaw podstępnych danych:

3
3 4 6

Po poprawkach twój algorytm da odpowiedź 4, a powinien dać odpowiedź 2.

1 użytkowników online, w tym zalogowanych: 0, gości: 1