Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 13.03.2012
Сообщений: 14

Для заданного целого числа n вычислить значение суммы

05.07.2012, 14:15. Показов 3129. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача:
Для заданного целого числа n вычислить значение суммы:

В знаменателе сумма всевозможных комбинаций i1+i2+...+in

Для n=3
for (i1=1;i1<=n;i1++)
for (i2=1;i2<=n;i2++)
for (i3=1;i3<=n;i3++)
S+=1/(i1+i2+i3)

Какое условие нужно добавить, чтобы выполнялось для любого n? (например n=6)
Изображения
 
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.07.2012, 14:15
Ответы с готовыми решениями:

Для заданного целого числа n вычислить значение суммы
Для заданного целого числа n вычислить значение суммы:\sum_{{i}_{1}}^{n}\sum_{{i}_{2}}^{n}...\sum_{{i}_{n}}^{n}\frac{1}{{i}_{1}+...{i}_{n}}

Для заданного целого числа n вычислить
Для заданного целого числа n вычислить \sum_{i=1}^{n}\frac{100}{{i}^{2}}+3*i Помогите с програмой пожалуй, зарание спасибо

Для заданного целого числа n вычислить значение суммы
Задача: Для заданного целого числа n вычислить значение суммы: В знаменателе сумма всевозможных комбинаций i1+i2+...+in Для n=3 ...

7
0 / 0 / 0
Регистрация: 13.03.2012
Сообщений: 14
05.07.2012, 17:21  [ТС]
Вот этот код подходит? Проверте пожалуйста.
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
#include "iostream"
#include "iomanip.h"
 
const int n = 4;
 
double f(const int lv1, int sum)
{
   double s;
   int i;
 
   if (lv1 == 0)
      return 1.0 / summ;
   else
   {
      s = 0;
      for (i=1; i<=n; i++)
         s = s + f(lv1 - 1, sum + i);
      return s;
   }
}
 
int main()
{
   double s;
   int i1, i2, i3, i4;
 
   s = 0;
   for (i1 = 1; i <= n; i++)
      for (i2 = 1; i2 <= n; i2++)
         for (i3 = 1; i3 <= n; i3++)
            s = s + 1.0 / (i1 + i2 + i3);
 
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << s << endl;
 
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << f(n, 0) << endl;
 
   return 0;
}
0
 Аватар для Thirteen
32 / 32 / 8
Регистрация: 04.07.2012
Сообщений: 50
05.07.2012, 22:50
Лучший ответ Сообщение было отмечено как решение

Решение

It fits...
Подходит бишь.
Рекурсивный алгоритм верный. Есть несколько ошибок в коде.

Исправленный вариант:
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
#include "iostream"
#include "iomanip"
 
using namespace std;
 
const int n = 5;
 
double f(const int lv1, int sum)
{
   double s;
   int i;
 
   if (lv1 == 0)
      return 1.0 / sum;
   else
   {
      s = 0;
      for (i=1; i<=n; i++)
{
         s = s + f(lv1 - 1, sum + i);
         //cout << i << ' ' << s << endl;
}
      return s;
   }
}
 
int main()
{
   double s;
   int i1, i2, i3, i4, i5;
 
   s = 0;
   for (i1 = 1; i1 <= n; i1++)
      for (i2 = 1; i2 <= n; i2++)
         for (i3 = 1; i3 <= n; i3++)
            for (i4 = 1; i4 <= n; i4++)
              for (i5 = 1; i5 <= n; i5++)
                s = s + 1.0 / (i1 + i2 + i3 + i4 + i5);
 
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << s << endl;
 
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << f(n, 0) << endl;
 
   return 0;
}
3
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,321
06.07.2012, 14:33
Подскажите пожалуйста как сделать для любого n вводимого пользователем с клавиатуры, этот код правильный????
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
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int n;
double f(const int lv1, int sum)
{
   double s;
   int i;
 
   if (lv1 == 0)
      return 1.0 / sum;
   else
   {
      s = 0;
      for (i=1; i<=n; i++)
{
         s = s + f(lv1 - 1, sum + i);
         //cout << i << ' ' << s << endl;
}
      return s;
   }
}
 
int main()
{
   double s;
   int i1, i2, i3, i4, i5,in;
  int n;
   s = 0;
cout<<"Enter n = ";
cin >>n;
   for (i1 = 1; i1 <= n; i1++)
      for (i2 = 1; i2 <= n; i2++)
         for (i3 = 1; i3 <= n; i3++)
            for (i4 = 1; i4 <= n; i4++)
              for (i5 = 1; i5 <= n; i5++)
              for (in = 1; in <= n; in++)
                s = s + 1.0 / (i1 + i2 + i3 + i4 + i5 + in);
 
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << s << endl;
 
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << f(n, 0) << endl;
 system("pause");
   return 0;
}
Заранее огромное спасибо.

Добавлено через 1 час 41 минуту
Подскажите пожалуйста что нужно сделать, чтобы для больших n = 100 и так далее считалось быстрее, а то у меня уже минут 20 висит????? Заранее огромное спасибо!!!!!
0
 Аватар для Thirteen
32 / 32 / 8
Регистрация: 04.07.2012
Сообщений: 50
06.07.2012, 21:57
Для n, вводимого с клавиатуры.
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
#include "iostream"
#include "iomanip"
 
using namespace std;
 
//const int n = 5;
 
double f(const int lv1, int sum, int n)
{
   double s;
   int i;
 
   if (lv1 == 0)
      return 1.0 / sum;
   else
   {
      s = 0;
      for (i=1; i<=n; i++)
{
         s = s + f(lv1 - 1, sum + i, n);
}
      return s;
   }
}
 
int main()
{
   int n;
   cout << "Input n = ";
   cin >> n;
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << f(n, 0, n) << endl;
 
   return 0;
}
Насчёт ускорения процесса, тут задача оптимизации.
Пока ничего не приходит в голову, как сделать алгоритм эффективнее.

Добавлено через 13 минут
Зашьём счётчик операций для интереса.

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
#include "iostream"
#include "iomanip"
 
using namespace std;
 
//const int n = 5;
int GlobalCounter = 0;
 
double f(const int lv1, int sum, int n)
{
   double s;
   int i;
 
   if (lv1 == 0)
      return 1.0 / sum;
   else
   {
      s = 0;
      for (i=1; i<=n; i++)
{
         cout << GlobalCounter++ << endl;
         s = s + f(lv1 - 1, sum + i, n);
 
}
      return s;
   }
}
 
int main()
{
   int n;
   cout << "Input n = ";
   cin >> n;
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << f(n, 0, n) << endl;
 
   return 0;
}
Ставим n = 10 и наслаждаемся.
2
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,321
07.07.2012, 01:11
Спасибо, предыдущий код быстро считал для n = 10, а вот для n = 90 считал около часа, а для n = 100 полностью зависал.
0
0 / 0 / 0
Регистрация: 13.03.2012
Сообщений: 14
08.07.2012, 18:12  [ТС]
Цитата Сообщение от Thirteen Посмотреть сообщение
Для n, вводимого с клавиатуры.
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
#include "iostream"
#include "iomanip"
 
using namespace std;
 
//const int n = 5;
 
double f(const int lv1, int sum, int n)
{
   double s;
   int i;
 
   if (lv1 == 0)
      return 1.0 / sum;
   else
   {
      s = 0;
      for (i=1; i<=n; i++)
{
         s = s + f(lv1 - 1, sum + i, n);
}
      return s;
   }
}
 
int main()
{
   int n;
   cout << "Input n = ";
   cin >> n;
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << f(n, 0, n) << endl;
 
   return 0;
}
Объясните пожалуйста, как это работает?
0
 Аватар для Thirteen
32 / 32 / 8
Регистрация: 04.07.2012
Сообщений: 50
09.07.2012, 09:52
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
#include "iostream"
#include "iomanip"
 
using namespace std;
 
//const int n = 5;
 
double f(const int lv1, int sum, int n) //Рекурсивная функция для вычисления суммы
//Принимает аргументы: lv1 - уровень цикла, sum - эту сумму мы передаём рекурсивно
//n - сколько раз суммировать.
{
   double s; //Посчитанная сумма
   int i; //Просто счётчик
 
   if (lv1 == 0)           //Если уровень цикла нулевой,
      return 1.0 / sum; //то выводим 1/сумму.
   else
   {
      s = 0;
      for (i=1; i<=n; i++) //Цикл, как и полагается от 0 до n
{
         s = s + f(lv1 - 1, sum + i, n); //Рекурсивный вызов с уменьшением уровня цикла и
                                                 //увеличиваем сумму на итерацию.
//Подробнее, что происходит:
//Допустим n = 3. Мы сначала вызвали f(3,0,3)
//Программа заходит в f, смотрит, уровень цикла не ноль (lv1!=0), значит надо войти в цикл
//и вызвать рекурсивно функцию, уменьшив при этом уровень на 1 и увеличив sum на итерацию
//то есть происходит вызов f(2,1,3)
//Дальше опять уровень не ноль, вызов f(1,2,3)
//Наконец происходит f(0,3,3) там уже уровень цикла 0, потому функция считает 1/sum
//и возвращает управление. И тут начинается самое интересное, функция возвращает управление
//туда, откуда произошёл вызов рекурсии. То есть в цикл. И выполняется рекурсивный вызов уже для
//i = 2. И так далее всё это происходит пока все циклы не кончатся. Тогда функция вернёт уже s,
//в которой хранится результат всех сложений во всех циклах.
}
      return s; //Вот прямо здесь и вернёт
   }
}
 
int main() //Это просто тест для f.
{
   int n; //Будем вводить с клавиатуры
   cout << "Input n = ";
   cin >> n;
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << f(n, 0, n) << endl; //Выведем сумму.
 
   return 0;
}
Что-то непонятно?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.07.2012, 09:52
Помогаю со студенческими работами здесь

Для заданного целого N вычислить значение суммы(с помощью рекурсии)
Помогите пожалуйста,хотя бы рекурсию...не могу понять сколько циклов должно быть

Вычислить квадрат суммы цифр заданного целого двухзначного числа
Вычислить квадрат суммы цифр заданного целого двухзначного числа. Входные данные: Во входном потоке задано единственное целое...

Сделать программу, для подсчёта суммы факториалов цифр заданного целого числа
Срочно надо для зачёта Нужно сделать программу, для подсчёта суммы фактариалов цифр заданного целого числа

Для любого целого К вычислить значение заданного выражения...
ДВ! Помогите пожалуйста . Для любого целого k обозначим количество цифр в его десятичной записи С(k). Например: С(1)=1, с(9)=1,...

Вычислить для заданного x значение суммы S (x)
В задачах вычислить для заданного x значение суммы S(x). Каждая задача может решаться в двух вариантах: а) задано число членов суммы...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru