C ++ для начинающих по использованию последовательностей и чисел с плавающей запятой - PullRequest
1 голос
/ 07 февраля 2012

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

Как далеко вам нужно сложить последовательность чисел, чтобы сумма превысила 10000? Выведите последний добавленный номер и итоговую сумму.

Это то, что я знаю, чтобы написать для простого добавления кода. На основании этого, как бы вы ответили на вышеуказанную проблему?

#include<iostream>
using namespace std; 
int main () 
{
int sum=0; 
int n;
for (n=1; n <250; n=n+1)
sum=sum+n;
cout<<"the sum of 1 through 250 is "<<sum<<endl;
return 0;
}

Ответы [ 4 ]

4 голосов
/ 07 февраля 2012

Вы можете просто добавить это условие (сумма превышает 10000) в свой оператор for ():

int sum=0;
for (int n=1; sum < 10000; n++)
    sum += n;

cout << "the sum of 1 through " << n-1 <<  " is " << sum << endl;

как только sum >= 10000 цикл прекратится, и вы получите свой ответ. Вы также можете использовать цикл while:

int sum=0, n = 0;
while (sum < 10000) {
    n++;
    sum += n;
}  
cout << "the sum of 1 through " << n <<  " is " << sum << endl;

или даже

int sum=0, n = 0;
while ( (sum += ++n) < 10000 ) ;

cout << "the sum of 1 through " << n <<  " is " << sum << endl;
3 голосов
/ 07 февраля 2012

Так как вы хотите, чтобы сумма последовательности была чуть больше 10000. Так что это AP (Арифметическая прогрессия).Таким образом, мы можем реализовать формулу для суммы AP.

т.е. S = n * [2a + (n-1)*d] / 2 проверьте ниже ссылку для деталей:
http://en.wikipedia.org/wiki/Arithmetic_progression

Put a=1, d=1 иS>10000 давайте возьмем S=10000
n, мы должны выяснить

уравнение становится n^2 + n - 20000 = 0

, что дает n = 141 (приблизительно принимая значение + ve sq. root)

Пусть n = X для произвольной задачи.поэтому мы можем запустить следующий цикл

sum = X * [2a + (X-1) d] / 2;

if(sum <= 10000)
   while(sum < 10000 && (++X))
      sum = X * [2a + (X-1)d] / 2;
else
   while(sum > 10000 && (--X))
      sum = X * [2a + (X-1)d] / 2;

cout << "We should continue the sequence up to" << X;

Вышеприведенный цикл займет не более 3 итераций, чтобы найтиX.

это уменьшит накладные расходы на запуск цикла.например, если у вас есть большая сумма, например, вместо 10000, пусть она будет 100000000, тогда вы увидите огромную разницу во времени выполнения.

3 голосов
/ 07 февраля 2012

Если вам просто нужно найти предельные значения, возможно, это поможет:

#include<iostream>
using namespace std; 
int main () 
{
int sum=0; 
int n=1;
while(sum<=10000){
sum=sum+n;
n++;
}
cout<<”to get 10000 you have to add till “<<n<<endl;
return 0;
}
1 голос
/ 07 февраля 2012

Вы также можете использовать формулу Гауса , чтобы выполнить обратную операцию и пропустить весь цикл.Тогда вы будете использовать поплавки и последовательности, как указано в заголовке.

...