Liczba w ciągu liczb - algorytm?

0

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!

0

Dodam jeszcze, że ma to być w C++. YO!

0

Algorytm w c++ YO!

1

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.

0

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.

0

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;

0

Zamieniasz na stringi i używasz find().

0
#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... :/

0
#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;
}
 
0

Dokładnie o coś takiego mi chodziło :) THX! YO!

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