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

Помогите с++ программирование пж

Leyla Nuriyeva Ученик (193), закрыт 3 недели назад
Ванечка подарил Анечке массив из N чисел. У Анечки есть любимое счастливое число — оно всегда помогает ей сдавать даже неправильные решения задач. Анечке стало очень интересно, сколько пар чисел из подаренного массива в сумме дают число K. К сожалению, сейчас она занята подготовкой к контрольной и не может это узнать. Помогите ей!
Лучший ответ
Николай Веселуха Высший разум (368748) 1 месяц назад
 #include <iostream> 
#include <vector>

using namespace std;

struct Pair {
using num_t = long;
using sum_t = long long;
num_t a;
num_t b;
bool matches(const sum_t k) const {
return (sum_t)a + (sum_t)b == k;
}
};

class Task {
public:
Task(const vector<Pair::num_t>& present) {
const size_t n = present.size();
const auto m = n - 1;
for (size_t i = 0; i < m; ++i) {
for (size_t j = i + 1; j < n; ++j) {
pairs.emplace_back(Pair{ present[i], present[j] });
}
}
}
size_t count(const Pair::sum_t k) const {
size_t quantity = 0;
for (const auto& item : pairs) {
if (item.matches(k)) {
++quantity;
}
}
return quantity;
}
private:
vector<Pair> pairs;
};

int main() {
size_t i = 0, t;
cin >> t;
vector<size_t> results(t);
while (i < t) {
size_t n;
cin >> n;
Pair::sum_t k;
cin >> k;
vector<Pair::num_t> present(n);
for (auto& number : present) cin >> number;
Task task(present);
results[i] = task.count(k);
++i;
}
for (auto result : results) {
cout << result << '\n';
}
}
Остальные ответы
resurce Гуру (4210) 1 месяц назад
 #include <iostream> 
#include <unordered_map>

int countPairsWithSumK(int arr[], int N, int K) {
std::unordered_map<int, int> countMap;
int pairCount = 0;

for (int i = 0; i < N; i++) {
int complement = K - arr[i];
if (countMap.find(complement)!= countMap.end()) {
pairCount += countMap[complement];
}
countMap[arr[i]]++;
}

return pairCount;
}

int main() {
int arr[] = {1, 5, 7, 1, 9, 5};
int N = sizeof(arr) / sizeof(arr[0]);
int K = 10;

int result = countPairsWithSumK(arr, N, K);
std::cout << "Количество пар с суммой " << K << ": " << result << std::endl;

return 0;
}
Dan4ikk85731Ученик (207) 1 месяц назад
как вы делаете такое отдельное окно с кодом
Leyla NuriyevaУченик (193) 1 месяц назад
спасибо но тут по входным данным не подходит
Входные данные

3
3 1
0 1 0
2 -1
-2 1
4 3
1 2 3 -1
Результат работы

2
1
1
литвин Профи (684) 1 месяц назад
Для решения этой задачи можно использовать два вложенных цикла. Во внешнем цикле нужно перебирать все числа массива, а во внутреннем — проверять, равна ли сумма текущего числа с каждым последующим числом числу K. Если такая пара чисел найдена, то нужно увеличить счётчик найденных пар на 1.

Вот пример реализации этого алгоритма на Python:
```python
def count_pairs(arr, k):
count = 0
for i in range(len(arr)):
for j in range(i + 1, len(arr)):
if arr[i] + arr[j] == k:
count += 1
return count

N = int(input("Введите количество чисел в массиве: "))
arr = [int(input(f"Введите {N} чисел через пробел: ").split()) for _ in range(N)]
K = int(input("Введите число K: "))
print(f"{count_pairs(arr, K)} пар чисел из подаренного массива в сумме дают число {K}")
```
Этот код запрашивает у пользователя количество чисел в массиве, сами числа и число K, после чего выводит количество пар чисел, которые в сумме дают K.
Даниил Кошелев Просветленный (22636) 1 месяц назад
Пусть ставит любимое число во всех ответах на контрольную
Похожие вопросы