Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
#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, если элемент не найден.
Проблема у меня в том, что не получается найти минимальный из подходящих ( Помогите пофиксить!
При естественном половом акте сперма мужчины попадает во влагалище женщины.Среда влагалища является губительной для сперматозоидов в силу повышенной кислотности (pH около 4). Спустя два часа после эякуляции... ЧИТАТЬ ДАЛЕЕ >>>
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 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 😉
Ё п. П, н п з и. Н х ж н п, б. Н и в, л з н л.
http://govnokod.ru/13868
http://govnokod.ru/13852
ЧИТАТЬ ДАЛЕЕ >>>
Нормальные люди из влагалища.
#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].
> int A[n-1];
Опять двадцать пять... Вы че там всей группой одну лабу копипастите? У двух людей абсолютно одинаковый косяк...
а что вам не нравится в объяве массива?
Для указателей, внезапно, тоже работают скобки. В данном случае записи *(arr+m) и arr[m] были бы эквивалентны. Скачай какую-нибудь хорошую книжку по си...
> а что вам не нравится в объяве массива?
То что он на один элемент меньше чем надо 😉
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;
}
Помогите пожалуйста, не пойму в чем фигня?
http://www.cplusplus.com/reference/iomanip/
Подозрительное сходство с http://govnokod.ru/13852... говно таится в одних и тех же местах 😉 Я бы въебал им обоим по паре.
P.S. А крестокомпилятор тролль, не скажет же про отсутствующий return без -Wall 😉
Само подозрительное это сходство имён и юзерИд у постеров.
O_o. Так это один человек... и он до сих пор не научился писать return...
http://en.cppreference.com/w/cpp/algorithm/lower_bound#Possible_implementation