Ciao!
Starei provando a scrivere un software per il calcolo combinatorio, ma non so come implementare le permutazioni con ripetizione, ottengo risultati scorretti e strani errori con le combinazioni semplici e con ripetizioni e temo di aver fatto qualche errore concettuale.
Ci date un'occhiata?

Grazie mille

codice:
#include <iostream>
#include <cmath>
using namespace std;

int fattoriale(int numero){
	if (numero == 1) {
		return 1;
	}
	if (numero == 0) {
		return 1;
	}
	int i;
	int f=1;
	for (i=1;i<=numero;i++){
		f=f*i;
	}
	return f;
}

int Permuta(int elementi){
	int ris;
	ris = fattoriale(elementi);
	cout <<" = " << ris << "\n\n";
}

int Disponi(int n, int k){
	int ris =1;
	for (int i=k;i>0;i--){
		ris=ris *n;
		k--;
		n--;
	}
	cout <<" = " << ris << "\n\n";
}

int DisponiR(int n, int k){
	int ris;
	ris=pow(n,k); // pow(base, esponente)=base^esponente
	cout <<" = " << ris << "\n\n";
}

int Combina(int n, int k){
	//da rivedere
	int ris;
	ris = (fattoriale(n))/(fattoriale(n-k)*fattoriale(k));
	cout <<" = " << ris << "\n\n";
}

int CombinaR(int n, int k){
	int ris;
	ris = (fattoriale(n-k+1))/(fattoriale(n-2*k+1)*fattoriale(k));
	cout <<" = " << ris << "\n\n";
}

int main() {
	int elementi;
	int gruppi;
	char permutazioni;
	char ripeti;
	char disposizioni;
	char combinazioni;
	char ordine;
	
	cout << "Software base di calcolo combinatorio - Colleoni Alessandro\n";
	cout << "Quanti elementi desideri considerare? ";
	cin >> elementi;
	cout << "I gruppi di elementi sono dello stesso numero di elementi del totale? [s/n] ";
	cin >> permutazioni;
	if(permutazioni == 'n') {
		cout << "Allora i gruppi saranno formati da quanti elementi? ";
		cin >> gruppi;
		cout << "L'ordine ha importanza? [s/n] ";
		cin >> ordine;
		}
	cout << "Ci possono essere ripetizioni? [s/n] ";
	cin >> ripeti;
	
	if(permutazioni == 's' && ripeti == 's'){
		cout << "Quante volte si ripetono quali elementi? (se si ripetono 2 volte un elemento e 3 volte un altro scrivi 2,3)";
		//cin???
		cout << "Permutazioni con ripetizione di " << elementi;
	//	PermutaR(elementi);
		return 0;
	}
	if(permutazioni == 's' && ripeti == 'n'){
		cout << "Permutazioni di " << elementi;
		Permuta(elementi);
		return 0;
	}
	if(ordine == 'n' && ripeti=='s') { 
			cout << "Combinazioni con ripetizione di " << elementi  << " elementi di classe "<< gruppi;
			CombinaR(elementi, gruppi);
		return 0;
	}
	if(ordine == 'n' && ripeti=='n') {
			cout << "Combinazioni di " << elementi  << " elementi di classe "<< gruppi;
			Combina(elementi, gruppi);
		return 0;
	}
	if(ordine == 's' && ripeti=='s') {
			cout << "Disposizioni con ripetizione di " << elementi << " elementi di classe "<< gruppi;
			DisponiR(elementi, gruppi);
		return 0;
	}
	if(ordine == 's' && ripeti=='n') {
			cout << "Distribuzioni di " << elementi  << " elementi di classe "<< gruppi;
			Disponi(elementi, gruppi);
		return 0;
	}
	cout << "Se leggi questo messaggio probabilmente qualcosa non ha funzionato";
	return 0;
}