A loteria da Mega-Sena
Muito provavelmente você já jogou na Mega Sena, não é?Ela funciona assim: você deve escolher 6 dezenas (sena), de um universo de 60 números, de 1 até 60.
No sorteio, tem um globo com 60 bolas e as moças bonitas lá vão tirando bolinha por bolinha...então, obviamente, as dezenas não se repetem, concorda?
No final, eles exibem o resultado na ordem crescente dos valores, ou seja, da dezena menor pra maior.
O 'menor' palpite é:
1 2 3 4 5 6
Já o 'maior' palpite é:
55 56 57 58 59 60
Aqui vem o segredo:
- A primeira dezena vai de 1 até 55
- A segunda dezena vai de 2 até 56
- A terceira dezena vai de 3 até 57
- A quarta dezena vai de 4 até 58
- A quinta dezena vai de 5 até 59
- A sexta dezena vai de 6 até 60
Quantos palpites são possíveis na Mega Sena
Então, vamos lá.
Vamos usar 6 variáveis para as dezenas: dez1, dez2, dez3, dez4, dez5 e a dez6.
A variável acumuladora, para contar quantas iterações (consequentemente, quantos palpites são possíveis na Mega Sena), é a sum.
Agora basta fazer FOR aninhado com FOR e contar quantas possibilidades existem, sempre tendo cuidado com o intervalo que cada dezena pode assumir.
Outro segredo, importante, é que a variável dez1 começa do 1, e as seguintes começam a partir da dezena anterior somado de 1, pois as dezenas são maiores que as outras, já que estamos assumindo que estejam em ordem crescente.
O código:
#include <iostream> using namespace std; int main() { int dez1, dez2, dez3, dez4, dez5, dez6, sum=0; for(dez1=1; dez1<=55 ; dez1++) for(dez2=dez1+1; dez2<=56 ; dez2++) for(dez3=dez2+1; dez3<=57 ; dez3++) for(dez4=dez3+1; dez4<=58 ; dez4++) for(dez5=dez4+1; dez5<=59 ; dez5++) for(dez6=dez5+1; dez6<=60 ; dez6++) sum++; cout << "Total : " << sum << endl; return 0; }
E o resultado é:
Se ainda se lembrar das aulas de análise combinatória, basta calcular (60 seis a seis).
Aqui levou 0.167s pra rodar mais de 50 milhões de iterações, e aí na sua máquina?
Exibindo todos os palpites da Mega-Sena
Agora vamos imprimir na tela todos os possíveis resultados:
#include <iostream> using namespace std; int main() { int dez1, dez2, dez3, dez4, dez5, dez6; for(dez1=1; dez1<=55 ; dez1++) for(dez2=dez1+1; dez2<=56 ; dez2++) for(dez3=dez2+1; dez3<=57 ; dez3++) for(dez4=dez3+1; dez4<=58 ; dez4++) for(dez5=dez4+1; dez5<=59 ; dez5++) for(dez6=dez5+1; dez6<=60 ; dez6++) cout<<dez1<<"-"<<dez2<<"-"<<dez3<<"-" <<dez4<<"-"<<dez5<<"-"<<dez6<<endl; return 0; }
Note que agora é beeeem mais demorado, e isso se deve ao fato da função cout ser mais lenta, demora pra exibir as coisas na sua tela, se a máquina ficasse só fazendo os cálculos, como no exemplo anterior, seria bem mais rápido. Mas aqui temos que mostrar os resultados das iterações, então a coisa é mais morosa mesmo.
Olá! Muito legal os programas. Estou tentando aprender c++. Com respeito a sua pergunta, no meu micro durou 0.2618. É um Pentium Gold 5420, 3,80Ghz com apenas 8 Gigabytes de memoria RAM e um ssd m.2 com capacidade de armazenamento de 256 Gigabytes.
ResponderExcluirFoco fé treina muito aprender a fazer algo que vende e ganha dinheiro com isso
Excluir