написать программу для выполнения суммы = 1+ (1 + 2) + (1 + 2 + 3) + ... + (1 + 2 ... + n) - PullRequest
0 голосов
/ 14 июля 2010

Я не могу получить правильные коды. Может ли кто-нибудь помочь?

#include<stdio.h>
int main()
{
 int n, sum,i,j;

 printf("Please enter an integer, n = ");
 scanf("%d", &n);

 for(i=1;i<=n;i++)
     for(j=1;j<=i;j++)
         sum = sum + n;
 printf("sum = %d", sum);


 return 0;
}

Ответы [ 10 ]

10 голосов
/ 14 июля 2010
  1. Вы не инициализируете sum.Инициализируйте его с помощью 0.
  2. . Вы не должны добавлять n на каждом шаге, но j.

Конечно, это исправляет ваш текущий код,Существуют лучшие подходы к решению проблемы, о которых уже упоминали другие.

Редактировать :

Просто для удовольствия, вот формула, которая позволяет решить эту проблему вO(1):

Ваша сумма равна n*(n + 1)*(2*n + 1) / 12 + n*(n + 1) / 4.

Это получается, записывая ее как сумму и используя тот факт, что сумма первых n последовательных квадратов равнаn(n + 1)(2n + 1) / 6, а сумма первых n положительных значений составляет n(n + 1)/2.+1, если вы можете найти более хорошую форму формулы.

9 голосов
/ 14 июля 2010

Нет необходимости в рекурсии, просто посмотрите на математику:

1 + (1+2) + (1+2+3) + ... + (1+2+3+...+n)

равно

1*n + 2*(n-1) + 3*(n-2) + ... + n
5 голосов
/ 14 июля 2010

Не то, что вы ожидали, но это является лучшим решением;)

int calculate (int n) {
  return (2*n + 3*n*n + n*n*n) / 6;
}
1 голос
/ 14 июля 2010

Делаем это итеративно, как вы пытались:

#include <stdio.h>

int main() {
    int i, t, n, sum;
    printf("Please enter an integer, n = ");
    scanf("%d", &n);
    t = sum = 0;
    for (i = 1; i <= n; ++i) {
        t += i;
        sum += t;
    }
    printf("sum = %d\n", sum);
    return 0;
}

Но есть формула замкнутой формы, как предложил IVlad.

1 голос
/ 14 июля 2010

Продумайте это до конца.У вас есть одна сумма, которую вы накапливаете, и у вас есть ряд значений.Каждое значение можно сгенерировать из предыдущего, добавив индекс.Так почему у вас есть вложенные циклы?

0 голосов
/ 08 августа 2016

n * (n - (n - 1))

int n, sum 

for n = 0; n <= 3; n ++ {
    sum += n * (n -(n - 1))
 }

работает и для факториалов (измените оператор и установите сумму в 1):

int n, sum 

sum = 1

for n = 0; n <= 3: n++{
    sum *= n * (n -(n -1))
}
0 голосов
/ 15 марта 2011

Попробуйте:

int main(void)
{
    int     n, sum;

    printf("\nPlease enter a postive integer value");    
    scanf("%d", &n);
    sum = n * ( n + 1 )/ 2;
    printf("\n%d", sum);
    return 0;
}
0 голосов
/ 14 июля 2010

Попробуйте это:

int main(void)
 {
   int total=1;
   int sumtotal = 0;
   int n=5;

   for(int i=1; i<=n; i++)
     {
       total+=i;
       sumtotal+=total;
     }
   //sumtotal should give you 1+(1+2)+(1+2+3)
   return 0;
 }
0 голосов
/ 14 июля 2010

Начните с математики, посмотрите, сможете ли вы найти какой-нибудь шаблон.

if n = 0 , res = 0?
if n = 1 , res = 1
if n = 2 , res = 1 + (1+2) 
if n = 3 , res = 1 + (1+2) + (1+2+3)

для каждого n, res равно *

0 голосов
/ 14 июля 2010

Вы никогда не инициализируете sum, поэтому вы добавляете все к случайному значению мусора.Палка sum = 0; перед вашими петлями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...