Mam dwa dobrze działające programy, z których pierwszy oblicza kombinacje z podaniem ich elementów:
#include "IndexCombination.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
#include <map>
#include <sstream>
#include <mem.h>
#include <conio.h>
using namespace std;
using namespace stdcomb;
bool GetNextComb(std::vector<unsigned int> &vi);
struct Element
{
char name[6];
int numbers[30];
char chain[90];
};
const Element elements[] = {
{
"ia11",
{3,9,17,21,24,31,33,36,42,49,4,8,19,22,28,30,34,39,43,47,2,6,10,13,14,25,29,37,38,46},
"3,9,17,21,24,31,33,36,42,49,4,8,19,22,28,30,34,39,43,47,2,6,10,13,14,25,29,37,38,46"
}, {
"ia34",
{1,6,12,15,22,27,31,32,41,42,4,7,14,17,23,30,33,36,45,48,2,9,13,18,21,26,34,39,44,49},
"1,6,12,15,22,27,31,32,41,42,4,7,14,17,23,30,33,36,45,48,2,9,13,18,21,26,34,39,44,49"
}, {
"ia72",
{3,8,11,18,22,25,36,37,43,46,1,6,16,17,23,28,35,40,41,44,2,5,12,19,24,27,31,34,42,49},
"3,8,11,18,22,25,36,37,43,46,1,6,16,17,23,28,35,40,41,44,2,5,12,19,24,27,31,34,42,49"
}, {
"ia167",
{3,4,12,15,21,28,32,39,47,48,6,9,16,17,29,30,31,38,41,42,7,8,11,20,26,27,34,35,45,46},
"3,4,12,15,21,28,32,39,47,48,6,9,16,17,29,30,31,38,41,42,7,8,11,20,26,27,34,35,45,46"
}, {
"ia190",
{3,10,11,14,22,23,32,35,43,44,6,9,16,19,24,29,37,38,45,48,2,5,13,18,25,30,31,40,41,0},
"3,10,11,14,22,23,32,35,43,44,6,9,16,19,24,29,37,38,45,48,2,5,13,18,25,30,31,40,41,0"
}, {
"ia21",
{2,5,16,19,25,30,34,39,45,48,1,9,12,13,21,24,33,36,44,49,3,8,15,20,23,26,35,40,43,46},
"2,5,16,19,25,30,34,39,45,48,1,9,12,13,21,24,33,36,44,49,3,8,15,20,23,26,35,40,43,46"
}, {
"ia64",
{6,9,13,20,28,29,33,40,43,48,2,7,16,19,24,27,31,34,44,47,5,8,14,17,21,30,32,37,41,46},
"6,9,13,20,28,29,33,40,43,48,2,7,16,19,24,27,31,34,44,47,5,8,14,17,21,30,32,37,41,46"
}, {
"ia102",
{4,9,14,19,22,29,35,38,46,47,5,8,13,16,21,26,33,40,41,48,6,7,15,17,28,30,32,39,42,45},
"4,9,14,19,22,29,35,38,46,47,5,8,13,16,21,26,33,40,41,48,6,7,15,17,28,30,32,39,42,45"
}, {
"ia178",
{6,9,15,20,23,24,37,38,42,45,7,8,16,19,22,25,34,39,43,46,1,2,17,18,26,29,31,40,47,0},
"6,9,15,20,23,24,37,38,42,45,7,8,16,19,22,25,34,39,43,46,1,2,17,18,26,29,31,40,47,0"
}, {
"ia180",
{1,4,13,18,27,30,33,38,45,46,2,3,12,15,22,23,39,40,44,47,8,9,11,17,24,25,32,37,49,0},
"1,4,13,18,27,30,33,38,45,46,2,3,12,15,22,23,39,40,44,47,8,9,11,17,24,25,32,37,49,0"
}
};
int main(int argc, char *argv[])
{
CIdxComb cb;
cb.SetSizes(10,6);
vector<unsigned int> combination(6);
combination[0] = 0;
combination[1] = 1;
combination[2] = 2;
combination[3] = 3;
combination[4] = 4;
combination[5] = 5;
int Total = 0;
do {
Total++;
cout << "Combination number. " << Total << endl;
for (unsigned i = 0; i < combination.size(); i++)
{
const Element &element = elements[combination[i]];
cout << element.name << ": " << element.chain << endl;
// tu musi być druga pętla for
}
}
while(cb.GetNextComb(combination));
cout << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
A drugi oblicza ile razy w danej kombinacji wystąpiła jakaś liczba, przy czym wyświetla tylko te, które wystąpiły 6 lub więcej razy:
#include <iostream>
#include <mem.h>
#include <conio.h>
using namespace std;
int main()
{
int TestArray[] = {
3,10,11,14,22,23,32,35,43, 44,6,9,16,19,24,29,37,38,45,48, 2,5,13,18,25,30,31,40,41,0,
2,5,16,19,25,30,34,39,45,48, 1,9,12,13,21,24,33,36,44,49, 3,8,15,20,23,26,35,40,43,46,
6,9,13,20,28,29,33,40,43,48, 2,7,16,19,24,27,31,34,44,47, 5,8,14,17,21,30,32,37,41,46,
4,9,14,19,22,29,35,38,46,47, 5,8,13,16,21,26,33,40,41,48, 6,7,15,17,28,30,32,39,42,45,
6,9,15,20,23,24,37,38,42,45, 7,8,16,19,22,25,34,39,43,46, 1,2,17,18,26,29,31,40,47,0,
1,4,13,18,27,30,33,38,45,46, 2,3,12,15,22,23,39,40,44,47, 8,9,11,17,24,25,32,37,49,0};
const int n = sizeof(TestArray) / sizeof(int);//combination.size();
const int range = 100;
const int minval = 6;
int occurences[range];
memset(occurences,0,range*sizeof(int));//combination.size();
for (int i=0; i<n; ++i)
occurences[TestArray[i]]++;
for (int i=0; i<range; ++i)
if (occurences[i]>=minval)
cout << "liczba " << i << " wystapila " << occurences[i] << " razy\n";
getch();
return 0;
}
Moje pytanie brzmi: czy można jakoś połączyć te programy w jeden? Chodziłoby o to, aby program liczył te 210 kombinacji gdzieś w tle, a następnie obliczał ilość wystąpień elementów w każdej z nich i podawał tylko te elementy, które występują sześć lub więcej razy. Innymi słowy OUTPUT powinien wyglądać jakoś tak:
Combination number 1
Liczba 3 wystąpiła 6 razy
Liczba 48 wystąpiła 7 razy
Liczba 0 wystąpiła 8 razy
Combination number 2
Liczba 5 wystapiła 6 razy
itd.
Kombinowałem trochę z pętlami, ale mi nie wychodziło.Pozdrawiam wszystkich!