Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Hamastri
0 / 0 / 0
Регистрация: 13.10.2016
Сообщений: 28
1

Требуется для каждого числа найти количество вариантов разбиения его на сумму двух других чисел из набора

21.05.2017, 17:33. Просмотров 702. Ответов 0
Метки нет (Все метки)

Дана задача:
Кликните здесь для просмотра всего текста

Дано N натуральных чисел. Требуется для каждого числа найти количество вариантов разбиения его на сумму двух других чисел из данного набора.

Формат входных данных
В первой строке дано число N ( 1 ≤ N ≤ 10000). Далее заданы N натуральных чисел, не превосходящих 1.000.000.000. Для каждого числа количество разбиений меньше 231.

Формат выходных данных
Вывести N чисел – количество разбиений, в порядке, соответствующем исходному. В конце вывести пробел!!

Пример
Входные данные Выходные данные
5
1 1 2 2 3 0 0 1 1 4



Я пытался делать так:
Беру число из массива
Разбиваю его в цикле на два слагаемых(как i и (число - i) )
1)Кол-во слагаемых(i) и умножаю на кол-во слагаемых(число - i)
2)Когда i == число - i использовал формулу кол-во сочетаний из n элементов по 2
Суммировал кол-во вариантов 1 и 2
Вывожу и продолжаю цикл.

Но программа ужасно тупит и выводит не те числа.
Вот собственно она:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <cmath>
 
using namespace std;
 
int fact(int);
int main()
{
    int n, i=0, j=0, k=0, s1=0, s2=0, kol=0, y=0;
    double h;
    cin >> n;
    int a[n];
    for(i=0; i < n; i++)
        cin >> a[i];
    for(i=0; i < n; i++)//Берём a[i] число
    {
    if(a[i]%2 != 0)
        y = (a[i]/2)-1;
    else
        y = a[i]/2;
        for(j=1; j <= y; j++)//Считчик кол-ва слагаемых
        {
            for(k=0; k <= n; k++)//Идём по массиву a[i] и ищем числа j и a[i]-j
            {
                if(a[k] == j)
                {
                    s1++;
                    cout << s1 << " s1" << endl;
                }
 
                else if(a[k] == a[i] - j)
                {
                    s2++;
                    cout << s2 << " s2" << endl;
                }
            }
            if(j == a[i] - j && s1 > 1)
                kol = kol + fact(s1)/(2*fact(s1-2));
            else if(j == a[i])
                kol = kol;
            else
                kol = kol + (s1 * s2);
            cout << kol << " KOL" << endl;
        }
        //if(i == n-1)
            cout << kol << endl;
        //else
            //cout << kol << " ";
        s1 = 0;
        s2 = 0;
        kol=0;
    }
 
    return 0;
}
 
int fact(int n)
 {
 int f=1,i;
 for(i=2;i<=n;++i)
 {
 f=f*i;
 }
 return f;
 }
Помогите, пожалуйста, сегодня сделать надо. Хотябы алгоритм решения.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2017, 17:33
Ответы с готовыми решениями:

Для каждого числа найти количество вариантов разбиения его на сумму двух других чисел из данного набора
Условие Дано N натуральных чисел. Требуется для каждого числа найти количество вариантов разбиения...

Даны целые числа K,N а также К наборов целых чисел по N элементов в каждом наборе .Для каждого набора вывести сумму его элементов
Ребята,пожалуйста,укажите ошибку... Даны целые числа K,N а также К наборов целых чисел по N...

Для каждого набора чисел вывести сумму его отрицательных элементов
Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого...

Требуется, определяя для каждого числа количество цифр, использовавшихся при его записи, найти и вывести максимальное такое значение
Дан текстовый файл с именем FileName, в первой строке которого записано единственное число N, а во...

Циклы: для каждого набора ненулевых чисел найти наименьшее значение его элементов
Помогите пожалуйста Дано K наборов ненулевых целых чисел. Признаком завершения каждого набора...

0
StudAssistant
Эксперт
34811 / 27003 / 5019
Регистрация: 17.04.2006
Сообщений: 49,622
21.05.2017, 17:33
Закажите контрольную, курсовую, диплом или любую другую студенческую работу здесь.
0
StackOverflow
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2017, 17:33

Вводятся четыре числа. И требуется найти сумму двух больших чисел и произведение двух меньших
Помогите сделать программу. Вроде, не такая сложная, но не могу понять, как делать Вводятся четыре...

Найти сумму чисел из первых двух цифр каждого числа
Ввести два числа. Найти сумму чисел из первых двух цифр каждого числа, используя процедуру ,...

Дана последовательность n натуральных чисел. Для каждого числа вычислить количество его цифр и сумму этих цифр. Вывести на экран каждое число, количес
Дана последовательность n натуральных чисел. Для каждого числа вычислить количество его цифр и...


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

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

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