Znacie może jakiś szybki algorytm, który znalazłby mi jakąś liczbę w ciągu liczb, która jest jej najbliższej?
np.
*mam liczbę 2,5 to w ciągu 1 2 3 4 5 6 7 8 9 najbliższa to 2;
*mam liczbę 5,5 to w ciągu 1 9 najbliższa to 9;
*mam liczbę 12 to w ciągu 1 2 3 4 14 16 18 najbliższa to 14;
*etc.
Za pomoc dziękuję! YO!
Dodam jeszcze, że ma to być w C++. YO!
Algorytm w c++ YO!
Masz ten ciąg posortowany czy nie?
Poczytaj o wyszukiwaniu binarnym - proste do implementacji i szybkie.
Algorytm to algorytm, sposób rozwiązania jakiegoś problemu. W C++ to może być implementacja algorytmu, czyli gotowiec.
jedziesz po ciągu, liczysz różnicę między twoim 2,5 a liczbą w ciągu, szukasz minimalnej wartości bezwzględnej tej różnicy.
for(int i=0;i<tablicalenght;i++)
{
if(tablica[i]<dana)
absLower=abs(Tablica[i]-dana)
index=i
else
absGreater=abs(Tablice[i]-dana)
}
if(absLower<absGreater)
retrun index
else
index+1;
Zamieniasz na stringi i używasz find()
.
#include<iostream>
#include<cstring>
using namespace std;
int main(){
short dana, arr[5], absLower, absGreater, index=0;
cin>>dana;
for(short i=0; i<5; i++)
cin>>arr[i];
for(short i=0; i<5; i++){
if(arr[i]<dana)
absLower=abs(arr[index=i]-dana);
else
absGreater=abs(arr[i]-dana);
}
if(absLower<absGreater)
cout<<arr[index];
else
cout<<arr[index+1];
system("pause");
}
Skorzystałem z kodu RomkaAtomka, ale niestety to nie działa tak jak powinno... :/
#include <iostream>
#include <climits>
using namespace std;
double abs(double a)
{
return a > 0 ? a : -a;
}
int main()
{
double a;
int n, *tab, najblizsza, roznica = INT_MAX;
cout << "Podaj liczbe, dla ktorej chcesz wykonac szukanie: ";
cin >> a;
cout << "\nPodaj dlugosc ciagu liczb: ";
cin >> n;
tab = new int[n];
for(int i=0; i<n; i++)
{
cout << "\nPodaj liczbe nr " << i+1 << ": ";
cin >> tab[i];
double tmp_roznica = a - tab[i];
if(abs(tmp_roznica) < roznica)
{
roznica = abs(tmp_roznica);
najblizsza = tab[i];
}
}
cout << "Liczba najblizsza " << a << " to: " << najblizsza;
return 0;
}
Dokładnie o coś takiego mi chodziło :) THX! YO!