Вход на сайт
вычисление чисел
479 просмотров
Перейти к просмотру всей ветки
в ответ kraz 02.07.06 23:53, Последний раз изменено 05.07.06 00:46 (voxel3d)
> нужна программа вычисление чисел,скажем пример 6 из 49( ~15 000 000 вариантов).и что бы программа показала все варианты.ест в россии, но я в россии ,точно знаю. если кто имеет или знает где взят пишите.
Про Россию не понял, про что речь. Кстати, Вы на три порядка ошиблись, вариантов не ~15 миллионов, а ~10 миллиардов, если быть точным, то: 10 068 347 520.
Если Вам хватит бумаги и терпения, то нате, держите Вашу программу. Правда, у неё есть большой недостаток, на таких последовательностях, ввиду лени мне оптимизировать её, а именно, делать нормальный вывод, вместо того, чтобы на каждую итерацию перебора печатать очередной вариант, работает она медленно. Компилировать: g++ -O3 -Wall -o lotto.exe main.cpp, запускать: lotto 6 49, получить результат в файл: lotto 6 49 > filename.
Про Россию не понял, про что речь. Кстати, Вы на три порядка ошиблись, вариантов не ~15 миллионов, а ~10 миллиардов, если быть точным, то: 10 068 347 520.
Если Вам хватит бумаги и терпения, то нате, держите Вашу программу. Правда, у неё есть большой недостаток, на таких последовательностях, ввиду лени мне оптимизировать её, а именно, делать нормальный вывод, вместо того, чтобы на каждую итерацию перебора печатать очередной вариант, работает она медленно. Компилировать: g++ -O3 -Wall -o lotto.exe main.cpp, запускать: lotto 6 49, получить результат в файл: lotto 6 49 > filename.
В ответ на:
main.cpp
#include <stdlib.h>
#include <iostream>
using namespace std;
int SEQ_LENGTH;
int MAX_VALUE;
long long counter = 0;
int* seq;
bool initSeq(char** argv)
{
SEQ_LENGTH = atoi(argv[1]);
MAX_VALUE = atoi(argv[2]);
if( !SEQ_LENGTH||!MAX_VALUE||SEQ_LENGTH>MAX_VALUE )
return false;
seq = new int[SEQ_LENGTH];
for(int j=0;j<SEQ_LENGTH;++j) {
seq[j] = j+1;
}
return true;
}
inline void print()
{
for(int j=0;j<SEQ_LENGTH;++j) {
cout << seq[j] << " ";
}
cout << endl;
++counter;
}
inline bool is_in(int value, int idx)
{
for(int j=0;j<SEQ_LENGTH;++j)
if( idx!=j && seq[j]==value )
return true;
return false;
}
inline void increase(int idx)
{
while( is_in(++seq[idx], idx) );
}
inline bool incLeft(int idx)
{
if( idx<0 )
return false;
increase(idx);
bool result = true;
if( seq[idx]>MAX_VALUE ) {
result = incLeft(idx-1);
seq[idx] = 0;
increase(idx);
}
return result;
}
void printUsage()
{
cout << "Lotto: invalid parameters" << endl;
cout << "Usage: lotto M N" << endl;
cout << "Where: M <= N;" << endl;
cout << " M: Sequence's length" << endl;
cout << " N: Max number in the sequence" << endl;
}
int main(int argc, char** argv)
{
if( argc!=3||!initSeq(argv) ) {
printUsage();
return 1;
}
while( seq[SEQ_LENGTH-1]<=MAX_VALUE || incLeft(SEQ_LENGTH-1) ) {
print();
increase(SEQ_LENGTH-1);
}
cout << endl << "Count: " << counter << endl;
delete [] seq;
return 0;
}
Dropbox - средство синхронизации и бэкапа файлов.
