Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.91
dron-k
1 / 1 / 0
Регистрация: 24.03.2009
Сообщений: 24
#1

решение массива - C++

26.07.2009, 14:47. Просмотров 2902. Ответов 16
Метки нет (Все метки)

Не сочтите за сложность помочь с такой задачей:

Найти минимальное из чисел, встречающихся в целочисленном
массиве X=(x1,x2,...,xn) ровно два раза.

Если можно то пришлите алгоритм решения, или сам код!!!

Заранее спасибо!!!

Программа нужна на C
http://www.cyberforum.ru/cpp-beginners/thread61063.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2009, 14:47
Я подобрал для вас темы с готовыми решениями и ответами на вопрос решение массива (C++):

Посчитать сумму элементов массива, при которых квадратное уравнение имеет решение
Дана матрица a (а1,а2,а3...аn) Найти сумму тех элементов,при которых уравнение...

Численное решение СЛАУ методом Гаусса с организацией хранения матрицы в виде одномерного массива
Помогите кому не сложно.

Преобразовать решение используя указатели (дано решение без указателей)
Элемент матрицы назовем седловой точкой, если он является наименьшим в своей...

Преобразовать решение (дано решение без указателей)
Помогите начинающему программисту с преобразованием. Нужно приведенное решение...

Создать два массива. Вычислить количество тех элементов каждого массива, для которых выполняется неравенство: 2<элемент массива<10
помогите,пожалуйста! есть вот такие задания...ОЧЕНЬ надо на завтра... ...

16
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
26.07.2009, 15:19 #2
1. отсортировать массив
2. найти первое число, повторяющееся 2 раза.
0
crashc
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
26.07.2009, 15:23 #3
сортировка массива может проводится с помощью стандартной функции sort вот например код программы сортирующей массив
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream.h>
#include <algorithm>
#include <vector>
 
//---------------------------------------------------------------------------
 
#pragma argsused
 
int main(int argc, char* argv[])
{int p;
 cout<<"vvedite kol-vo elementov"<<endl;
 cin>>p;
 float *r=new float[p];
 unsigned int r_size = p;
 for(int i=0;i<p;i++)
 {cout<<"["<<i<<"]= ";
  cin>>r[i];
  }
  cout<<"----------------------------"<<endl;
  cout<<"Ishodnii massiv"<<endl;
   for(unsigned int i = 0; i < r_size; i++ ) {
     cout << r[i] << " ";
   }
   cout << endl;
  sort(r,r+r_size);
  cout<<"----------------------------"<<endl;
  cout<<"Perepisannii massiv"<<endl;
  for(unsigned int i = 0; i < r_size; i++ )
  cout<<" "<<r[i]<<endl;;
 
        cin.get();
        cin.get();
        return 0;
}
1
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
26.07.2009, 16:04 #4
Алгоритм без сортировки массива.
Сначала искомого числа нет.

Цикл по массиву.
Для каждого индекса берем соответствующее ему значение и считаем сколько раз в массиве он встречается.
Если не встречается ровно два раза, тогда переходим к следующему.
Если встречается ровно два раза, то =>
то смотрим какое из двух чисел меньше - найденное сейчас или найденное ранее.
И сохраняем как искомое то число, которое меньше.

На выходе из цикла возможен вариант, что искомое число не найдено.
0
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
26.07.2009, 16:33 #5
Цитата Сообщение от odip Посмотреть сообщение
Для каждого индекса берем соответствующее ему значение
что будете делать, если значения отрицательные? или равны максимальному числу int? создавать массив такой же размерности?
Цитата Сообщение от odip Посмотреть сообщение
Если не встречается ровно два раза, тогда переходим к следующему.
я правильно понял: для каждого числа нужно будет все элементы массива просматривать? O(n*n) раз необходимо будет операцию сравнения сделать
***
вобщем, не нравится мне ваш вариант
0
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
26.07.2009, 17:01 #6
что будете делать, если значения отрицательные? или равны максимальному числу int? создавать массив такой же размерности?
В языке C массивы идут от 0.
я правильно понял: для каждого числа нужно будет все элементы массива просматривать? O(n*n) раз необходимо будет операцию сравнения сделать
Правильно.
Но даже если массив у тебя сортированный, то простейший алгоритм, который ищет в нем число, которое встречается два раза тоже будет O(n*n).
Можно конечно использовать балансированные деревья или hash-и, но это сильно усложнит эту задачу, которая скорее всего для обучения.
Зато в моем алгоритме исходный массив не изменяется.

Добавлено через 55 секунд
вопервых это программа для постороения массива в порядке возрастания
То есть условие не полное ?
Ну тогда приведи полное условие.
0
dron-k
1 / 1 / 0
Регистрация: 24.03.2009
Сообщений: 24
26.07.2009, 17:59  [ТС] #7
Это условие полное. Просто я только начал учить С, поэтому никакие сложности не нужны.
1
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
26.07.2009, 18:01 #8
Цитата Сообщение от odip Посмотреть сообщение
В языке C массивы идут от 0.
не знал. спасибо.
Цитата Сообщение от odip Посмотреть сообщение
Для каждого индекса берем соответствующее ему значение и считаем сколько раз в массиве он встречается.
расшифруйте пожалуйста эту фразу, а именно: что собой представляют соответствующие значения?
***
кстати, моя программа неправильно работает.
алгоритм std::adjacent_find находит первую пару смежных элементов. и на этом возвращает результат поиска. т.е. повторяющихся элементов может быть больше двух.
вот исправленная версия проги:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <algorithm>
#include <iostream>
 
int main()
{
  int arr[] = {4, 4, 5};
  const int array_size = sizeof(arr) / sizeof(*arr);
 
  std::sort(arr, arr + array_size);
 
  int *it = arr;
  int *it_end = arr + array_size;
  
  while ((it = std::adjacent_find(it, it_end)) != it_end) {
    if ((it + 2 != it_end) && *(it + 2) != *it) {
      std::cout << "Found: " << *it << std::endl;
      return 0;
    } else {          
      it = std::upper_bound(it, it_end, *it);
    }
  }
  std::cout << "Not found" << std::endl;
  return 0;
}
0
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
26.07.2009, 18:04 #9
Надо было сразу сказать, что на C нужно.
Тут на C++ решения выложили

Добавлено через 2 минуты 23 секунды
расшифруйте пожалуйста эту фразу, а именно: что собой представляют соответствующие значения?
Вообщем слово индекс можно выкинуть. Я просто хотел сказать, что цикл нужно делать по индексу массива.
Берем значение и считаем сколько раз оно в массиве встречается.
0
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
26.07.2009, 19:14 #10
Цитата Сообщение от crashc Посмотреть сообщение
функция sort работает всегда без искомых чисел т.к. она работает за счет функции vector
за счёт функции вектор говорите? это в каком месте? хочу пример!
0
Skirmisher
44 / 44 / 1
Регистрация: 23.05.2009
Сообщений: 92
28.07.2009, 16:03 #11
Цитата Сообщение от odip Посмотреть сообщение

Например так: 3 5 5 10 11 12 13 14 15 16
Минимальное число, которое встречается ровно два раза - это 5.
А если в массиве не встречается одинаковых чисел что тогда?
0
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
28.07.2009, 16:05 #12
C++
1
std::cout<<"таких элементов нет";
0
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
28.07.2009, 16:05 #13
А если в массиве не встречается одинаковых чисел что тогда?
Печатать текст: заданное число не найдено.
1
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
28.07.2009, 16:25 #14
Цитата Сообщение от Skirmisher Посмотреть сообщение
adjacent_find тоже из STL, если не знал.
я знаю, что он из STL (как ни странно).
акцент в другом:
в первой версии вашей программы вы отказывались использовать STL, делая ударение на том, что программист должен всё писать сам. и предложили свою версию quick sort.
Хотя она уже реализована в C standard library
во-второй же версии вы тупо использовали sort.
так топик стартеру какой из ваших рекомендаций следовать: велосипеды мастерить или STL юзать?
1
Skirmisher
44 / 44 / 1
Регистрация: 23.05.2009
Сообщений: 92
28.07.2009, 16:45 #15
Цитата Сообщение от zim22 Посмотреть сообщение
я знаю, что он из STL (как ни странно).
акцент в другом:
в первой версии вашей программы вы отказывались использовать STL, делая ударение на том, что программист должен всё писать сам. и предложили свою версию quick sort.
Хотя она уже реализована в C standard library
во-второй же версии вы тупо использовали sort.
так топик стартеру какой из ваших рекомендаций следовать: велосипеды мастерить или STL юзать?
STL юзать)
1
firefox1913
28 / 28 / 6
Регистрация: 01.07.2009
Сообщений: 58
28.07.2009, 17:23 #16
Лучший ответ Сообщение было отмечено как решение

Решение

вот держи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <algorithm>
using namespace std;
class f
{
public:
   f(int i) : m(i) { }
   bool operator() (int &a)
   {
      return m==a;
   }
private:
    int m;
};
int main()
{
   int mas[]={1,23,4,6,1},size,k;
   size=sizeof(mas) / sizeof(mas[0]);
   int min=*min_element(mas,mas+size);
   f b(min);
   k=count_if(mas,mas+size,b);
   if(k==2) cout<<"est "<< min <<endl;
   else cout<<"no "<<endl;
   return 0;
}
3
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
28.07.2009, 21:14 #17
Цитата Сообщение от firefox1913 Посмотреть сообщение
вот держи
как было бы здорово, если бы вы прочитали тему и поняли что топик стартеру нужен вариант на Си, а не на Си++
0
28.07.2009, 21:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2009, 21:14
Привет! Вот еще темы с решениями:

Функции обработки массива (определить произведение элементов массива, заменить модулем все элементы массива, уничтожить элемент с заданным значением)
Вот задания,не могу сделать ни одного из них,буду благодарен за помощь. ...

решение двумерного массива
Помогите пожалуйста с задачей,не получается решить( Найти произведение...

Решение одномерного массива
&quot;С&quot; вводится с клавиатуры, составить с помощью генератора случайных чисел...

решение с использованием двумерного массива
Если не сложно, может кто пояснить, в чем заключается суть решения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru