Hogyan lehet az 1-től 900-ig egész számok közül 30-at kiválasztani úgy, hogy a kiválasztottak közül bármely kettő összege mindig különböző legyen?
B) 900 helyett melyik a legkisebb szám, amikor még ki lehet választani?
Pl. 1,2,3 után a 4 már nem jó, mert 1+4=2+3
1,2,3,5 után a 6 vagy 7 már nem jó, mert 1+6=2+5 , 1+7=3+5
(De természetesen nem kell a legkisebb jót választani.)
Jó lenne pl. a Fibonacci-sor, de túl gyorsan növekszik.
Előre is köszönöm.
Én 27 darabot találtam, de lehet, hogy nem a legjobb módszert alkalmaztam. Én úgy dolgoztam, hogy írtam egy programot, ami a következőt végzi:
Tároltam a már megkapott számokat, és minden számnak minden számmal való összegét.
Egy ciklussal végig mentem 1-900-ig a számokon.
Ha annak a számnak a már tárolt számokkal való összege szerepel az összeg tömbben, akkor nem tároltam le, de ha nem szerepelt, akkor letároltam a számot a megtalált számok tömbjében, és az addigi számokkal való összegét az összegeket tároló tömbben.
Ezeket a számokat találtam:
1. = 1
2. = 2
3. = 3
4. = 5
5. = 8
6. = 13
7. = 21
8. = 30
9. = 39
10. = 53
11. = 74
12. = 95
13. = 128
14. = 152
15. = 182
16. = 212
17. = 258
18. = 316
19. = 374
20. = 413
21. = 476
22. = 531
23. = 546
24. = 608
25. = 717
26. = 798
27. = 862
...
Lehet az, hogy nem az a legjobb megoldás, ha sorban mész a számokon.
Ja és itt a program. Lehet, hogy hibásan dolgozik, ezért kérlek nézd át.
include<iostream>
using namespace std;
int tomb[900 * 900];
int szamok[900];
int sz = 0;
int k = 0;
bool ellenorzes(int n)
{
for(int i = 0; i < k; ++i)
for(int j = 0; j < sz; ++j)
if(szamok[j] + n == tomb[i])
return false;
int valami = k;
for(int i = 0; i < sz; ++i)
tomb[k++] = szamok[i] + n;
szamok[sz++] = n;
return true;
}
int main()
{
int k = 0;
for(int i = 1; i <= 900; ++i)
ellenorzes(i);
for(int i = 0; i < sz; ++i)
cout <<i+1<< ". = "<< szamok[i] << " \n";
return 0;
}
Köszi!
Azt hiszem még egy visszalépés kellene: ha nem jó, akkor az/valamelyik előző számnál egy nagyobb jót keressen.
"int tomb[900 * 900];" - itt * helyett + van?
Vagy talán több "fix" fibonacci-számmal kellene indulni?
7. = 21
8. = 30 ->34
9. = 39 ->55
esetleg 10. = 53 ->89
Szerintem inkább szamok[30]; kellene, és az n. szám ciklusban szamok[n-1]+1 -től 900-ig
Ha n<30, szamok[n]=900 ->visszalépés
A tomb[1800] -ben(logikai) pedig ellenőrizni, hogy szamok[n]+szamok[n-1,n-2...] be van-e állítva.
Ha egyik sincs, akkor jó ->mindet beállítani, visszalépéskor ezeket törölni.
Valami ilyesmire gondolok.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!