Кресты / Говнокод #13892 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
#include <iostream>
using namespace std;

int binsearch(int* arr, int s, int r, int l, int t){
    int m=(l+r)/2;
    if (*(arr+m) == s) return m; // t - искомое
    if (m == l || m == r) return 0;
    if (*(arr+m) < s) binsearch(arr, s, m, r, t);
    else binsearch(arr, s, l, m, t);
    }

int main()
{
    int n, k;
    cin >> k;
    cin >> n;
    int A[n-1];
    for (int i = 0; i < n; i++){
        cin >> A[i];
    }
    cout << binsearch(A, k, n-1, 0, 0);
}

Требуется найти число K в упорядоченном массиве из N элементов и
определить чему равен номер соответствующего элемента массива.
Если элемент не найден, то вывести 0.

Входные данные
В первой строке расположено искомое число К.
Во второй - количество элементов в массиве N <= 10000.
Далее расположены N целых чисел, упорядоченных по возрастанию.

Выходные данные
Выведите наименьший номер найденного значения, или 0, если элемент не найден.

Проблема у меня в том, что не получается найти минимальный из подходящих ( Помогите пофиксить!

Запостил: aesc_smirnov aesc_smirnov, (Updated )

Комментарии (31) RSS

  • int s, int r, int l, int t
    
    int n, k;

    Ё п. П, н п з и. Н х ж н п, б. Н и в, л з н л.
    Ответить
        • При естественном половом акте сперма мужчины попадает во влагалище женщины.Среда влагалища является губительной для сперматозоидов в силу повышенной кислотности (pH около 4). Спустя два часа после эякуляции...
          ЧИТАТЬ ДАЛЕЕ >>>
          Ответить
      • Я кажется пофиксил, не знаю)

        #include <iostream>
        using namespace std;

        int binsearch(int* arr, int s, int r, int l){
        int m=(l+r)/2;
        if (*(arr+m) == s) return m; // t - искомое
        if (m == l || m == r) return 0;
        if (*(arr+m) < s) binsearch(arr, s, m, r);
        else binsearch(arr, s, l, m);
        }

        int main()
        {
        int n, k, res;
        cin >> k;
        cin >> n;
        int A[n-1];
        for (int i = 0; i < n; i++){
        cin >> A[i];
        }
        res = binsearch(A, k, n-1, 0);
        if (res != 0){
        for(int j = 1; ; j++){
        if(A[res-j] == A[res]) res -= j;
        else break;
        }
        } cout << res;
        }
        Ответить
        • > *(arr+m)
          Вот нахер так писать, а? Можно же просто arr[m].

          > int A[n-1];
          Опять двадцать пять... Вы че там всей группой одну лабу копипастите? У двух людей абсолютно одинаковый косяк...
          Ответить
          • указатель меньше места занимает, массив у меня большой.
            а что вам не нравится в объяве массива?
            Ответить
            • > меньше места занимает,
              Для указателей, внезапно, тоже работают скобки. В данном случае записи *(arr+m) и arr[m] были бы эквивалентны. Скачай какую-нибудь хорошую книжку по си...

              > а что вам не нравится в объяве массива?
              То что он на один элемент меньше чем надо 😉
              Ответить
          • #include <iostream>
            using namespace std;

            int binsearch(int* arr, int s, int r, int l){
            int m=(l+r)/2;
            if (arr[m] == s) return m; // t - искомое
            if (m == l || m == r) return 0;
            if (arr[m] < s) binsearch(arr, s, m, r);
            else binsearch(arr, s, l, m);
            }

            int main()
            {
            int n, k, res;
            cin >> k;
            cin >> n;
            int A[n-1];
            for (int i = 0; i < n; i++){
            cin >> A[i];
            }
            res = binsearch(A, k, n-1, 0);
            if (res != 0){
            for(int j = 1; ; j++){
            if(A[res-j] == A[res]) res -= j;
            else break;
            }
            } cout << res;
            }

            Помогите пожалуйста, не пойму в чем фигня?
            Ответить
  • Ещё в прошлый раз хотел запостить, учитывая что требования писать велосипеды в задании нет:
    #include <algorithm>
    #include <iostream>
    #include <vector>
    
    
    int main()
    {
        int amount, value;
        std::cin >> value >> amount;
        std::vector<int> data(amount); //int — примитивный тип и никакого оверхеда
                                       //на создание вектора из n элементов нет
        for (int& i: data) //Простой способ.
            std::cin >> i; //Можно было использовать reserve+push_back
                           //или back_inserter
        auto found = std::lower_bound(data.cbegin(), data.cend(), value);
        if (found == data.cend() || *found != value)
            std::cout << 0 << std::endl;
        else
            std::cout << ( std::distance(data.cbegin(), found) + 1 ) << std::endl;
        return 0;
    }
    Ответить
    • > Что за `else binsearch' без return?
      Подозрительное сходство с http://govnokod.ru/13852... говно таится в одних и тех же местах 😉 Я бы въебал им обоим по паре.

      P.S. А крестокомпилятор тролль, не скажет же про отсутствующий return без -Wall 😉
      Ответить
        • > Само подозрительное это сходство имён и юзерИд у постеров.
          O_o. Так это один человек... и он до сих пор не научился писать return...
          Ответить
  • В следующий раз иди на киберфорум или скюль.ру. Там такое любят.
    Ответить
  • Если уже нашёл ID какого - то из K, можно после этого применить нечто, вроде
    while (A[FoundID - 1] == K) {
        FoundID--;
    }
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8