Witam!
Mam taki problem:
rozwiązuje sobie zadanko. Dobrym sposobem rozwiązania byłoby, dla liczby a, wyszukanie w tablicy pierwszego elementu którego wartość >=a i zwrócenie jego indeksu. Czy da się jakoś przerobić binary search z stla, aby dawało taki wynik?
0
0
Dokładnie, to chodzi o przerobienie lower_bound.
0
czemu nie zastosować:
find_if ?
0
Mam takie zadanko:
http://skin.radom.pl/SHowFile.aspx/tun.pdf?taskid=ded9c070-5536-4946-927f-0d3e83749a8f&cday=702c7c4f-5b80-45d3-b902-ded50b52ef9b&filename=tun.pdf
Mój kod:
#include <iostream>
using namespace std;
int tunele[500000];
int samochody[500000];
bool funkcja(int i)
{
return (i < tunele[i]);
}
int main()
{
ios_base::sync_with_stdio(0);
int a, b;
cin >> a >> b;
for(int i=0; i<a; i++)
cin >> tunele[i];
for(int i=0; i<b; i++)
cin >> samochody[i];
for(int i=0; i<b; i++)
{
int x = find_if(tunele, tunele+a, funkcja());
cout << *x << " "
}
return 0;
}
W 9 linijce kompilator mówi error: too few arguments to function `bool funkcja(int)'.
Jak to można zrobić?
0
Lepiej to zrobić przez functional:
#include <cstdlib>
#include <iostream>
using namespace std;
struct funkcional
{
int a;
funkcional(int a):a(a) {}
bool operator()(int i) { return i>a; }
};
int tunele[500000];
int samochody[500000];
int main()
{
int a,b;
cin>>a>>b;
for(int i=0;i<a;++i) cin>>tunele[i];
for(int i=0;i<b;++i) cin>>samochody[i];
for(int i=0;i<b;++i)
{
//szukamy w tunele wartość większą od samochody[i]
int *x=find_if(tunele,tunele+a,funkcional(samochody[i]));
if(x>=tunele+a) cout<<"brak"<<endl;
else
{
cout<<"wartosc: "<<*x<<endl;
cout<<"indeks: "<<(x-tunele)<<endl;
}
}
cin.sync(); cin.get();
return 0;
}
Z funkcją jedynie przez zmienną globalną co jest beznadziejnym rozwiązaniem:
#include <cstdlib>
#include <iostream>
using namespace std;
int szukamy;
bool funkcja(int i)
{
return i>szukamy;
};
int tunele[500000];
int samochody[500000];
int main()
{
int a,b;
cin>>a>>b;
for(int i=0;i<a;++i) cin>>tunele[i];
for(int i=0;i<b;++i) cin>>samochody[i];
for(int i=0;i<b;++i)
{
//szukamy w tunele wartość większą od samochody[i]
szukamy=samochody[i];
int *x=find_if(tunele,tunele+a,funkcja);
if(x>=tunele+a) cout<<"brak"<<endl;
else
{
cout<<"wartosc: "<<*x<<endl;
cout<<"indeks: "<<(x-tunele)<<endl;
}
}
cin.sync(); cin.get();
return 0;
}
0
Ok, dzięki za odp. Mógłbyś wyjaśnić tę strukturę?
struct funkcional
{
int a;
funkcional(int a):a(a) {} // co tu jest? Jakiś konstruktor? Tylko czemu jest :a(a)?
bool operator()(int i) { return i>a; } // jaki to właściwie operator? operator ()?
};
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.