C++-ban hogy nézem meg ciklussal, hogy x darab szám között (tömbben vannak) vannak-e/van-e olyan amelyek egyeznek?
ez lenne a tippem:
int n[x];
for (int i = 0; i < x; i++)
{
for (int j = 0; i < x; j++)
{
if (n[i] == n[j]) cout << "Van egyezés.\n";
}
}
A fenti kód működhet (bár szerintem van benne egy változó elírás). Két gond lehet vele:
1. Ahogy a tömbméret nő, a keresési idő négyzetesen nő.
2. Önmagát is meg fogja találni, szóval már az elején biztosan lesz "egyezés". :)
Próbáld így:
int n[x];
// ...
for (int i = 0; i < x-1; i++) {
__for (int j = i+1; j < x; j++) {
____if (n[i] == n[j]) cout << "Van egyezés.\n";
__}
}
előző, és így hogyan nő a keresési idő?
(úgy egyébként erre jobb megoldás a függvény, amelyik returnöl, ha csak arra vagy kíváncsi, hogy igen, vagy nem)
"előző, és így hogyan nő a keresési idő?"
Nem mondtam, hogy ez villámgyors, de egy fokkal hatékonyabb. Ez is négyzetesen nő, de fele az előzőnek. ((x^2)/2).
"jobb megoldás a függvény, amelyik returnöl"
____if (n[i] == n[j]) return 1;
// ...
return 0;
Igen, attól függ, mi a feladat: Darabszám kell, indexek kellenek, igaz-hamis válasz kell, stb. Ezek alapján tovább lehet gyorsítani, ez igaz. :)
Bevittem egy függvénybe de nem akar működni.
#include <iostream>
bool CheckForEquality (int Array[], int n)
{
for (int i = 0; i < n-1; i++)
{
for (int j = i+1; j < n; j++)
{
if (Array[i] == Array[n]) return 1;
}
}
}
int main()
{
int Numbers[6] = {1,2,3,4,6,6};
std::cout << CheckForEquality(Numbers, 6);
return 0;
}
Legközelebb alszom egyet az ilyen problémákra. Elírtam egy változót, elnézést, ezért nem működött. :)
Köszönöm a segítséget mindenkinek.
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!