Liczba w ciągu liczb - algorytm?

Odpowiedz Nowy wątek
2011-07-14 01:53
YO
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!

czemu najbliższa 2.5 to 2 a nie 3? Są w tej samej odległości a zgodnie z ogólnie przyjętymi zasadami zaokrąglania 3 jest bliżej - unikalna_nazwa 2011-07-14 01:58

Pozostało 580 znaków

2011-07-14 01:54
YO
0

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

to chcesz w końcu algorytm czy gotowy kod? - unikalna_nazwa 2011-07-14 01:57

Pozostało 580 znaków

2011-07-14 04:10
YO
0

Algorytm w c++ YO!

Pozostało 580 znaków

2011-07-14 04:38
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.


Pozostało 580 znaków

2011-07-14 06:44
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.

Pozostało 580 znaków

2011-07-14 10:45
RomekAtomek
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;

Pozostało 580 znaków

2011-07-14 11:30
0

Zamieniasz na stringi i używasz find().

to akurat beznadziejny pomysł do tego zadania. - _13th_Dragon 2011-07-14 13:55
A, źle przeczytałem treść. - hauleth 2011-07-14 15:00
Pewnie jeszcze się nie obudziłeś o 11:30 (za wczesna pora) ;P - _13th_Dragon 2011-07-14 15:19

Pozostało 580 znaków

2011-07-17 14:10
YO
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... :/

Pozostało 580 znaków

2011-07-17 15:26
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;
}
 

Pozostało 580 znaków

2011-07-17 16:39
YO
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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