Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
-11 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 31
1

Определить, сколько слагаемых должно быть в сумме, чтобы сумма оказалась больше или равной N

20.10.2012, 13:32. Просмотров 995. Ответов 16
Метки нет (Все метки)


Доброго времени суток.
Задача: Сколько слагаемых должно быть в сумме 1 + 1/2 + 1/3 + …+ 1/k, чтобы сумма оказалась больше или равной N. Задаётся только число N, требуется найти k.

Вот что у меня получилось:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    int N, k=0;
    float s=0;
    scanf("%d", &N);
    while(N>s)
    {
        k++;
        s=s+1/k;
    }
    printf("%d", k);
    return 0;
}
Но увы, задача работает лишь с единичными случаями. 1 - 1 ; 0 - 0 .
на следующих тестах она ломается.
скажем, 2 - ответ 4
Чего еще не хватает в решении?
P.S. я не прошу решить, только дайте наводку
Компилятор: Code Block
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2012, 13:32
Ответы с готовыми решениями:

Сколько слагаемых должно быть в сумме, чтобы эта сумма оказалась больше 5
Сколько слагаемых должно быть в сумме 1+1/2+1/3+1/4+...+1/n, чтобы эта сумма оказалась больше 5 ?...

Сколько слагаемых должно быть в сумме, чтобы сумма оказалась больше 5
помогите пожалуйста написать программу Сколько слагаемых должно быть в сумме 1+1/2+1/3+...+1/n ,...

Сколько слагаемых должно быть в сумме, чтобы эта сумма оказалась больше 3.7
задача 1 сколько слагаемых должно быть в сумме 3 +1 / 4 +1 / 5 + .+1 / n чтобы эта сумма оказалась...

сколько слагаемых должно быть в сумме 1+1/2+1/3+.+1/N, чтобы сумма оказалась больше L. L вводится пользователем , L принадлежит промежутку [1;2]
Cколько слагаемых должно быть в сумме 1+1/2+1/3+...+1/N, чтобы сумма оказалась больше L. L вводится...

16
319 / 269 / 128
Регистрация: 24.05.2012
Сообщений: 629
20.10.2012, 14:46 2
У Вас все правильно написано.
Цитата Сообщение от ReSSorT Посмотреть сообщение
скажем, 2 - ответ 4
1 + .5 + .(3) + .25 = 2.08(3)
Все верно, четыре слагаемых.
0
-11 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 31
20.10.2012, 15:27  [ТС] 3
Цитата Сообщение от Кот Ангенс Посмотреть сообщение
У Вас все правильно написано.1 + .5 + .(3) + .25 = 2.08(3)
Все верно, четыре слагаемых.
я же написал - проходит всего 1 теста.
на 2 - 4 программа уже не работает.
0
4 / 4 / 3
Регистрация: 04.10.2012
Сообщений: 32
21.10.2012, 07:43 4
ReSSorT, знак деления "/", делит нацело если с обеих сторон целочисленные значения, в итоге в твоем случае 1/k = 0 (если к > 1 )
думаю дальше сам догадаешься как исправить?
0
-11 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 31
21.10.2012, 11:49  [ТС] 5
Цитата Сообщение от Amsaredoc Посмотреть сообщение
ReSSorT, знак деления "/", делит нацело если с обеих сторон целочисленные значения, в итоге в твоем случае 1/k = 0 (если к > 1 )
думаю дальше сам догадаешься как исправить?
суть уловил, но из функций деления я знаю только "/" и "div"
или есть еще что-то??
0
4 / 4 / 3
Регистрация: 04.10.2012
Сообщений: 32
21.10.2012, 12:20 6
ReSSorT, "/" и является "div", если значения с которыми она работает принадлежат целому типу(int), значит чтобы она работала как надо, надо изменить тип переменной "k"
0
-11 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 31
21.10.2012, 12:32  [ТС] 7
Цитата Сообщение от Amsaredoc Посмотреть сообщение
ReSSorT, "/" и является "div", если значения с которыми она работает принадлежат целому типу(int), значит чтобы она работала как надо, надо изменить тип переменной "k"
менять переменные местами пройденный этап. программа все равно не работает..
0
4 / 4 / 3
Регистрация: 04.10.2012
Сообщений: 32
21.10.2012, 12:43 8
ReSSorT, не местами! сделай k переменной с плавающей точкой(float)
0
-11 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 31
21.10.2012, 12:49  [ТС] 9
ReSSorT, не местами! сделай k переменной с плавающей точкой(float)
я же говорю, пройденный этап. программа не выводит правильные ответы

C
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    int N;
    float s=0, k=0;
    scanf("%d", &N);
    while(N>s)
    {
        k++;
        s=s+1/k;
    }
    printf("%f", k);
    return 0;
}
0
4 / 4 / 3
Регистрация: 04.10.2012
Сообщений: 32
21.10.2012, 12:51 10
ReSSorT, вы уверены?а почему у меня выводит?
Тесты
0 - 0
1 - 1
2 - 4
3 - 11
0
-11 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 31
21.10.2012, 12:57  [ТС] 11
Цитата Сообщение от Amsaredoc Посмотреть сообщение
ReSSorT, вы уверены?а почему у меня выводит?
Тесты
0 - 0
1 - 1
2 - 4
3 - 11
какой у вас компилятор?
0
4 / 4 / 3
Регистрация: 04.10.2012
Сообщений: 32
21.10.2012, 12:59 12
ReSSorT, я тоже об этом подумал...у меня GCC
0
-11 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 31
21.10.2012, 13:02  [ТС] 13
Цитата Сообщение от Amsaredoc Посмотреть сообщение
ReSSorT, я тоже об этом подумал...у меня GCC
мы задачи сдаем в система ejudge там она тесты прошла, но пишет: превышено максимальное время работы. (из-за этого , наверно, Code Block и виснет)
вы не знаете как оптимизировать работу?
0
4 / 4 / 3
Регистрация: 04.10.2012
Сообщений: 32
21.10.2012, 13:11 14
ReSSorT, без понятия,я сам новичок...
Кстати,даже при N равном 21 мой комп довольно долго думает, и "k" принимает огромные значения,число повторений цикла здесь огромно, может как-то попробовать его уменьшить?

P.S. поставил N=50, минуту назад, жду...
0
-11 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 31
21.10.2012, 13:24  [ТС] 15
а 50 даже пробовать не стоит. нужно, чтобы программа прошла 2 теста: 1-1 и 3-11 , у меня кодеблок уже на 2 - 4 виснет.. видимо не судьба эту задачу сделать. по крайней мере посредством while
0
4 / 4 / 3
Регистрация: 04.10.2012
Сообщений: 32
21.10.2012, 13:41 16
ReSSorT, проверь вот что...выведи все промежуточные значения "s", проверь,она вообще меняется?
0
-11 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 31
21.10.2012, 14:54  [ТС] 17
Цитата Сообщение от Amsaredoc Посмотреть сообщение
ReSSorT, проверь вот что...выведи все промежуточные значения "s", проверь,она вообще меняется?
меняется
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2012, 14:54

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

Найти сколько слагаемых необходимо, чтобы сумма 2+4+6+… оказалась больше 100
Найти сколько слагаемых необходимо, чтобы сумма 2+4+6+… оказалась больше 100.

Найти, сколько слагаемых необходимо, чтобы сумма 2+4+6+… оказалась больше 100
Найти, сколько слагаемых необходимо, чтобы сумма 2+4+6+… оказалась больше 100.

Найти сколько слагаемых необходимо, чтобы сумма ряда оказалась больше 100
сколько слагаемых необходимо, чтобы сумма ряда 2,4,6,8...n оказалась больше 100

Сколько слагаемых должно быть в сумме
Сколько слагаемых должно быть в сумме 1+1/2+1/3+1/4+...+1/n, чтобы эта сумма оказалась больше 5...


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

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

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