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

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

21.05.2017, 17:33. Просмотров 1322. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2017, 17:33
Ответы с готовыми решениями:

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

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

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

Для каждого набора целых чисел вывести количество его элементов
/*Series35. Дано целое число K, а также K наборов ненулевых целых чисел. Признаком завершения...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2017, 17:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Для каждого числа найти количество его делителей и определить общее количество простых чисел в последовательности
С клавиатуры вводится последовательность целых чисел, 0 - конец этой последовательности. Для...

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

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

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


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

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

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