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

ПОМОГИТЕ ПРОШУ С++ ДАЮ 100 Баллов

Leyla Nuriyeva Ученик (193), на голосовании 2 дня назад
Ванечка подарил Анечке массив из чисел. У Анечки есть любимое счастливое число — оно всегда помогает ей сдавать даже неправильные решения задач. Анечке стало очень интересно, сколько пар чисел из подаренного массива в сумме дают число . К сожалению, сейчас она занята подготовкой к контрольной и не может это узнать. Помогите ей!
В первой строке находится число t — количество тестов.
Для каждого теста в первой строке вводятся два числа n, k, где n — это размер подаренного Ванечкой массива и k — счастливое число. В следующей строке дано чисел, по модулю не превосходящих — числа в Анечкином массиве.
Голосование за лучший ответ
литвин Профи (684) 1 месяц назад
Программа на Python, которая решает данную задачу:

```python
t = int(input("Введите количество тестов: "))

for _ in range(t):
n, k = map(int, input().split())
arr = list(map(int, input().split()))
pairs = 0

for i in range(n):
for j in range(i+1, n):
if arr[i] + arr[j] == k:
pairs += 1

print(pairs)
```

Пример входных данных:
```
2
5 10
1 3 5 7 9
4 8
2 4 6 8
```

Пример вывода:
```
2
2
```

Эта программа сначала считывает количество тестов, затем для каждого теста считывает размер массива и искомое число, а затем сам массив чисел. Далее программа с помощью вложенных циклов проверяет все возможные пары элементов массива и подсчитывает количество пар, сумма которых равна искомому числу k.
Leyla NuriyevaУченик (193) 1 месяц назад
#include <iostream>
#include <vector>

int main() {
int t;

std::cin >> t;

while (t--) {
int n, k;
std::cin >> n >> k;
std::vector<int> arr(n);
for (int i = 0; i < n; ++i) {
std::cin >> arr[i];
}

int pairs = 0;
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
if (arr[i] + arr[j] == k) {
pairs++;
}
}
}

std::cout << pairs << std::endl;
}

return 0;
}
Я переписала на с++ но тут тайм лимит
ֆհαδoᵂ☄ᴷίʆʆerЗнаток (305) 1 месяц назад
нейронку юзал что даже не прочитал то что на с++ надо было
ֆհαδoᵂ☄ᴷίʆʆer Знаток (305) 1 месяц назад
#include <iostream>
#include <vector>
#include <unordered_map>

int main() {
int t;
std::cin >> t;

for (int i = 0; i < t; ++i) {
int n, k;
std::cin >> n >> k;

std::vector<int> arr(n);
for (int j = 0; j < n; ++j) {
std::cin >> arr[j];
}

std::unordered_map<int, int> num_count;
int pairs = 0;
for (int j = 0; j < n; ++j) {
int target = k - arr[j];
if (num_count.find(target) != num_count.end()) {
pairs += num_count[target];
}
num_count[arr[j]]++;
}

std::cout << pairs << std::endl;
}

return 0;
}
Программа считывает количество тестов t. Для каждого теста программа сначала считывает размер массива n и число k. Затем считывает элементы массива. Далее программа считает количество пар чисел из массива, сумма которых равна числу k, используя хэш-таблицу std::unordered_map. В конце программа выводит количество найденных пар для каждого теста.
Николай Веселуха Высший разум (368761) 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';
}
}
Похожие вопросы