Даны целые числа а1, а2...а15 (могут быть повторяющиеся члены).
Получить все числа, которые входят в последовательность по одному разу.
Вот что получилось у меня, поможете поправить?
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL,"Rus");
const int n=15;
int b=0;
int A[n];
cout<<"Введите 15 элементов"<<endl;
for (int i=0; i<n; i++)
{
cin>>A[i];
}
for (int i=0;i<n;i++)
{
b=0;
for (int k=0; k<n;k++)
{
if (A[i]==A[k])
{
b=1;
}
}
if (b==0)
{
cout<<A[i]<<endl;
}
}
system("pause>0");
}
C/C++
Простая задачка на c++
Не хотелось бы навязываться, но не проще ли сначала сгруппировать (это более вольный аналог сортировки), потом просто пройти по массиву и отобрать уникальные элементы?
Заранее приношу все извинения, если вдруг STL использовать нельзя. Будь я разработчиком, то использовал бы контейнер map <int, bool> — это очень удобно.
При первом помещении в такой массив нового элемента присвоил бы ему значение true. При всех повторных ничего не добавлял бы, а присвоил бы существвющему элементу значение false.
По окончании ввода оставалось бы выбрать из массива элементы со значением true.
Заранее приношу все извинения, если вдруг STL использовать нельзя. Будь я разработчиком, то использовал бы контейнер map <int, bool> — это очень удобно.
При первом помещении в такой массив нового элемента присвоил бы ему значение true. При всех повторных ничего не добавлял бы, а присвоил бы существвющему элементу значение false.
По окончании ввода оставалось бы выбрать из массива элементы со значением true.
#include <iostream>
#include <set>
using namespace std;
int main() {
auto n = 15;
set<int> box;
int m;
cout << ">>> ";
do {
cin >> m;
box.insert(m);
} while (--n);
cout << "<<< ";
for (auto x : box) cout << x << ' ';
puts("");
system("pause > nul");
}
#include <set>
using namespace std;
int main() {
auto n = 15;
set<int> box;
int m;
cout << ">>> ";
do {
cin >> m;
box.insert(m);
} while (--n);
cout << "<<< ";
for (auto x : box) cout << x << ' ';
puts("");
system("pause > nul");
}
Ignis Inferno
вау, такое маленькое решение
Сергей Андреев
Похоже, что автор вопроса в первую очередь ожидал технологического обсуждения задачи.
Сергей Андреев
Николай, может быть Вы хотели использовать не set, а multiset?
Задача вовсе не требует выбирать каждый элемент по одному разу. Это задача выбора уникальных элементов.
Задача вовсе не требует выбирать каждый элемент по одному разу. Это задача выбора уникальных элементов.
#include<stdio.h>
#include<wchar.h>
#include<locale.h>
#include<unistd.h>
int main()
{
setlocale(LC_ALL,"Russian");
const int n=15;
int b;
int A[n];
wprintf(L"Введите %d элементов: \n",n);
for (int i = 0; i < n; i++)
{//for i
wprintf(L"A[%d] = ",i);
scanf("%d",&A[i]);
}//for i
for (int i = 0; i < n; i++)
{//for i
b=0;
for (int k = 0; k < n; k++)
{//for k
if ((A[i] == A[k]) && (i != k))
b++;
}//for k
if(!b) wprintf(L"уникальный элемент массива: %d \n",A[i]);
}//for i
fflush(stdout);//сброс буфера для паузы
sleep(5);//пауза
return 0;
}

#include<wchar.h>
#include<locale.h>
#include<unistd.h>
int main()
{
setlocale(LC_ALL,"Russian");
const int n=15;
int b;
int A[n];
wprintf(L"Введите %d элементов: \n",n);
for (int i = 0; i < n; i++)
{//for i
wprintf(L"A[%d] = ",i);
scanf("%d",&A[i]);
}//for i
for (int i = 0; i < n; i++)
{//for i
b=0;
for (int k = 0; k < n; k++)
{//for k
if ((A[i] == A[k]) && (i != k))
b++;
}//for k
if(!b) wprintf(L"уникальный элемент массива: %d \n",A[i]);
}//for i
fflush(stdout);//сброс буфера для паузы
sleep(5);//пауза
return 0;
}

Вот код, но где-то в if у него проблемы. Может быть и исправишь
Код:
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
cout << endl;
int chet = 0;
int size = 5;
int* arr = new int[size];
for (int i = 0; i < size; i++)
{
cin >> arr[i];
}
vector myvector(size);
bool znak = false;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (i != j && arr[i] == arr[j])
{
znak = true;
break;
}
}
if (znak == false)
{
myvector[chet] = arr[i];
cout << myvector[i] << ' ';
chet++;
}
}
for (int i = 0; i < size; i++)
{
cout << myvector[i] << " ";
}
delete[] arr;
return 0;
}
Код:
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
cout << endl;
int chet = 0;
int size = 5;
int* arr = new int[size];
for (int i = 0; i < size; i++)
{
cin >> arr[i];
}
vector myvector(size);
bool znak = false;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (i != j && arr[i] == arr[j])
{
znak = true;
break;
}
}
if (znak == false)
{
myvector[chet] = arr[i];
cout << myvector[i] << ' ';
chet++;
}
}
for (int i = 0; i < size; i++)
{
cout << myvector[i] << " ";
}
delete[] arr;
return 0;
}
Дамир Шингарев
Может быть проще на первом шаге перегруппировать элементы массива так, чтобы одинаковые шли рядом. Тогда на втором шаге будет проще выбрать уникальные.
Только прежде следует проверять неуникальность: если следующий элемент совпадает с текущим, то в цикле пропустить все такие же элементы и вернуться назад. А вот если следующий элемент сразу не совпал с текущим, то выбрать текущий как уникальный.
Только прежде следует проверять неуникальность: если следующий элемент совпадает с текущим, то в цикле пропустить все такие же элементы и вернуться назад. А вот если следующий элемент сразу не совпал с текущим, то выбрать текущий как уникальный.
Дамир Шингарев
Не понимаю, нужен ли динамический массив? Ведь число элементов однозначно задано условиями задания!
Похожие вопросы
- Мне нужна помощь с одной задачкой по c++.
- Помогите с задачкой по C++
- Задачка на C++ на формирование массива из 10 записей
- Помогите пожалуйста решить задачку по C++, напишите полный текст кода пожалуйста
- Помогите с задачкой по C++ пожалуйста
- Задачка по c++
- Чем отличается переменная *a от простой a в C++?
- Простое задание на C++. ПОМОГИТЕ
- Очень нужна помощь. нужен код на C. Задачка будет в описании.
- C++ Выведите в порядке возрастания все простые числа на отрезке [l;r]. Оформите решение в виде функции bool
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
cout << endl;
int chet = 0;
int size = 5;
int* arr = new int[size];
for (int i = 0; i < size; i++)
{
cin >> arr[i];
}
vector myvector(size);
bool znak = false;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (i != j && arr[i] == arr[j])
{
znak = true;
break;
}
}
if (znak == false)
{
myvector[chet] = arr[i];
cout << myvector[i] << ' ';
chet++;
}
}
for (int i = 0; i < size; i++)
{
cout << myvector[i] << " ";
}
delete[] arr;
return 0;
}
Замечание: искать совпадение следует в обратном направлении!!!