Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Нужна помощь с задачей по программированию С++ С# Или так или так

dellax Ученик (186), закрыт 2 года назад
Учитывая массив чисел из n целых чисел, верните массив всех уникальных подмассиов.

0 <= a, b, c, d < n
a, b, c, d - > уникальны.
nums[a] + nums[b] + nums[c] + nums[d] == target

Input: nums = [1,0,-1,0,-2,2], target = 0
Output: [[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

Input: nums = [2,2,2,2,2], target = 8
Output: [[2,2,2,2]]
Лучший ответ
Николай Веселуха Высший разум (360748) 2 года назад
#include <algorithm>
#include <iostream>
#include <vector>
#include <array>
#include <set>
#include <numeric>
using namespace std;
int main() {
cout << "target: ";
int target;
cin >> target;
cout << "size: ";
size_t sz;
cin >> sz;
vector<int> box(sz);
cout << "elements: ";
for (auto& x : box) cin >> x;
sort(box.begin(), box.end());
const auto length = 4;
const auto cmp = [target](array<int, length>& cox) {
return accumulate(cox.begin(), cox.end(), 0) == target;
};
const auto an = box.size() - length + 1;
const auto bn = an + 1;
const auto cn = bn + 1;
const auto dn = cn + 1;
set<array<int, length>> fox;
for (auto a = 0U; a < an; ++a) {
for (auto b = a + 1; b < bn; ++b) {
for (auto c = b + 1; c < cn; ++c) {
for (auto d = c + 1; d < dn; ++d) {
array<int, length> cox{ box[a], box[b], box[c], box[d] };
if (cmp(cox)) fox.emplace(cox);
}
}
}
}
cout.put('[');
auto m = 0U;
for (const auto& arr : fox) {
auto n = arr.size();
auto i = 0U;
for (auto x : arr) {
if (!i++) cout.put('[');
cout << x;
if (i != n) cout.put(',');
else cout.put(']');
}
if (++m != fox.size()) cout.put(',');
}
cout.put(']');
system("pause > nul");
}
Остальные ответы
Сергей Гений (56299) 2 года назад
Учитывая все правила этики, пошлите написавших эту задачу на три уникальных константных символа в русской кодировке.
dellaxУченик (186) 2 года назад
Неплохо, но решение бы пригодилось тоже
иван кузнецов, как я понял, надо найти все подмассивы, сумма элементов в которых равна заданному числу (target)
СергейГений (56299) 2 года назад
Не понятна формулировка "Учитывая массив xxx, верните массив всех уникальных массивов".

Учитывая гендер лиц в массиве А верните их уникальный возраст. Или летят два крокодила. Один зеленый, а другой налево.
Сергей Степанов, в примерах элементы подмассивов сортированы. Видимо, так и надо делать.
СергейГений (56299) 2 года назад
Без вашего пояснения и не понял бы, что они хотят.
Условие - 4 выборочных числа из оригинального массива дающих в сумме target.
создаем 4-rd вложенный цикл
for (a = 0 ; a< n-3; a++)
for (b= a+1; b< n-2; b++)
for (c = b+1; c < n-1; c++)
for (d = c+1; d < n; d++)
и проверяем условие massiv[a]+massiv[b]+massiv[c]+massiv[d] == target, при котором заполняем новый массив этими элементами.
СергейГений (56299) 2 года назад
Что же касается уникальности... то при соответствии условия нужно выполнять сравнение с уже имеющимися результатами, и если числа совпадают - то пропустить, иначе записать новый элемент.
if (new[i][j] == massiv[a] && new[i][j+1] == massiv [b] && и еще два элемента) то пропустить цикл, иначе записать новый элемент.
Похожие вопросы