Wybory cyfr

0

Witam, potrzebuję pomocy. Niestety jestem troche zielona, potrafie jedynie napisać bardzo, ale to bardzo banalne programy. A dla przyśpieszenia czasu, potrzebuje programu, który by wypisywał mi z 1,2,3,4,5,6,7,8,....,99,100 po 8 osób, ale tak, żeby każda liczba była inna np. 1,30,40,45,55,67,68,99
1,3,5,7,8,70,99,100. Po prostu jak w matematyce mam 100 miejsc, i 8 osob i kombinacje np. te osoby moge usciąść na 1,50,20.. miejscu
Znalazłam coś takiego, ale nie mogę tego przerobić :
#include <iostream>
#include <fstream>
#include <conio.h>

using namespace std;

int main()
{
ofstream pliczek;
pliczek.open("liczby.txt");

for(int i=0; i<10; i++)
    for(int j=0; j<10; j++)
	for(int k=0; k<10; k++)
	    for(int n=0; n<10; n++)
		if(i!=j && i!=k && i!=n && k!=j && k!=n && j!=n)
		    pliczek<<i<<j<<k<<n<<endl;		

pliczek.close();
    cout<<"gotowe";
getch();
return 0;

}

0

Masz wylosować czy wypisać wszystkie możliwe?
Czy rozumiesz różnicę pomiędzy cyfrą a liczbą?

0

Powinno być 8 petli indeksowanych 1-100 a warunek dot. różności tych liczb
powinien być podzielony na kilka warunków każdy w osobnej pętli z wyjątkiem pierwszej.

0

czyli coś w takim stylu? a jak zrobić by one nie były obok siebie? tylko byłyby oddzielone np. przecinkiem
#include <cstdlib>

#include <iostream>
#include <fstream>
#include <conio.h>

using namespace std;

int main()
{
ofstream pliczek;
pliczek.open("liczby.txt");

for(int i=1; i<50; i++)

{
for(int j=1; j<50; j++)
{ for(int k=1; k<50; k++)

	    {for(int n=1; n<50; n++)

	    { for(int x=1; x<50; x++)

{	for(int y=1; y<50; y++)

	   { for(int z=1; z<50; z++)

	    
		if(i!=j && i!=k && i!=n && k!=j && k!=n && j!=n)
		    pliczek<<i<<j<<k<<n<x<<y<<z<<<endl;

pliczek.close();
    cout<<"gotowe";
getch();

}}}}}}
system("pause");
return 0;
}

0

Czy 1,2,3,4,5,6,7,8 to to samo czy coś innego niż 1,2,3,4,5,6,8,7 ?

1

@24godzina dlaczego nie użyjesz google i nie nauczysz się? kombinacja bez powtórzeń:

#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <vector>

const char* filename = "out.txt";

int main() {
	/* kombinacja bez powtorzen z n elementow po k elementow */
	int n = 100;
	int k = 8;

	/* ogarniecie pliku */
	std::ofstream out(filename);
	if(!out) {
		std::cerr << "Can't create: " << filename << std::endl;
		exit(EXIT_FAILURE);
	}

	std::vector<bool> v(n);
	std::fill(v.begin() + k, v.end(), true);

	do {
		for (int i = 0; i < n; ++i)
			if (!v[i]) out << (i+1) << " ";
		out << "\n";
	} while (std::next_permutation(v.begin(), v.end()));

	out.close();
	return 0;
}

nie wystarczy Ci liczba takich kombinacji tylko musisz je wypisać do pliku o.0 ?
to może się wykonywać bardzo długo. lepiej zaangażować kilka wątków albo może jest do tego jakaś biblioteka matematyczna.

1

Ja radzę opisać dokładnie problem jaki ma rozwiązać twój program, a nie pytać jak naprawić twój koncept na rozwiązanie.

Jak na razie zrozumiałem, że potrzebujesz listę wszystkich kombinacji bez powtórzeń 8 z 100. Takich kombinacji jest bagatelka: 7503063898176000 co oznacza, że twój program nie zakończy działania za twojego życia. Dlatego właśnie podejrzewam, że twój problem nie wymaga kombinacji bez powtórzeń, tylko czegoś innego.

0

mózg się topi od czytania treści tego zadania, że Wam się chce domyślać

0

To zmniejsze troche liczby. Chcę aby program wypisywał mi 5 liczb z 50 i one mają się nie powtarzać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1