PDA

View Full Version : [C#] Programma combinazioni con 80 numeri in gruppi di 5


I24Zi3L
20-04-2011, 13:23
Salve, volevo chiedervi dei suggerimenti su come fare un programma che mi generi tutte le combinazioni con i numeri da 1 a 80 in gruppi da 5.

Grazie per l'aiuto.

gugoXX
20-04-2011, 23:01
Salve, volevo chiedervi dei suggerimenti su come fare un programma che mi generi tutte le combinazioni con i numeri da 1 a 80 in gruppi da 5.

Grazie per l'aiuto.

Intanto prova a dirci quante sono.

I24Zi3L
25-04-2011, 10:12
Ho fatto un piccolo Windows Form con un bottone ed una textbox e questo codice nella pagina cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace Combinazioni
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
int A = 1;
int B = 2;
int C = 3;
int D = 4;
int E = 5;

do
{
if (A != B &&
A != C &&
A != D &&
A != E)
{
if (B != C &&
B != D &&
B != E)
{
if (C != D &&
C != E)
{
if (D != E)
{
textBox1.Text += A + " - " +
B + " - " +
C + " - " +
D + " - " +
E + "\n";
}
}
}
}

if (E == 80)
{
E = 5;
D++;

if (D == 80)
{
E = 5;
D = 4;
C++;
}
if (C == 80)
{
E = 5;
D = 4;
C = 3;
B++;
}
if (B == 80)
{
E = 5;
D = 4;
C = 3;
B = 2;
A++;
}
}

E++;

}
while (A != 77);

}
}
}Vi sembra corretto?
Il mio PC è da oramai 4 ore che elabora i dati di questo programma. E' forse andato in loop?

clockover
25-04-2011, 11:16
Vi sembra corretto?

ma neanche per idea... cominciamo dal principio: come gugoXX ha già suggerito.... quante possono essere le combinazioni?

I24Zi3L
25-04-2011, 11:24
Quasi quante quelle del superenalotto...

clockover
25-04-2011, 11:27
Quasi quante quelle del superenalotto...

si ma quante...come si contano le combinazioni di un insieme di n elementi a gruppi di k

I24Zi3L
25-04-2011, 11:36
Beh dovrebbe essere 80!/5!(75!)=24040016

clockover
25-04-2011, 12:28
Ti propongo un algoritmo ricorsivo

funzione(array di appoggio, indice, n, k, DA){
maxIndex = indice + n - k;
for i = DA to maxIndex
appoggio[i] = i
se indice < k-1
funzione(array, indice + 1, n, k, j + 1)


indice è un indice che scorre tutti i numeri che ti servono a te e parte da 0
n = 80 nel tuo caso
k = 5 nel tuo caso
DA parte da zero ed è l'indice dell'array temporaneo

ho volutamente omesso molte cose ma il succo è:
1) - per ogni cella dell'array di appoggio tu puoi inserire numeri che partono da DA fino a maxIndex
2) - ad ogni iterazione chiami la funzione stessa incrementando l'indice dell'array temporaneo

prendi carta e penna e prova a eseguire l'algoritmo con pochi numeri...

I24Zi3L
25-04-2011, 23:20
Scusami ma non riesco ad interpretare bene l'algoritmo che mi proponi.
In che linguaggio è?

clockover
26-04-2011, 00:22
Non è in nessun linguaggio...è in pseudocodice
Ammetto di averlo scritto frettolosamente ma non è difficile da capire.. prova con carta e penna a simularlo magari con numeri fino a 5 presi a gruppi di 3 o 4