Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
609 / 89 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
1

Суперпоследовательность 123

03.11.2010, 14:25. Показов 1098. Ответов 9
Метки нет (Все метки)

СУПЕРПОСЛЕДОВАТЕЛЬНОСТЬ 123. В последовательности первые три числа 1, 2, 3. Каждое следующее число равно сумме трёх предыдущих. Определить 37 член этой последовательности. Определить сколько членов в последовательности с 1 по 37 кратны 3.
Решал в школе не получилось. Вывело какую-то ерунду, абсолютно не схожую с ответом. Сам все, что мог уже сделал:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main() {
int i, b=1; //Так как 3 уже кратно 3
int a[38];
a[0] = 1;
a[1] = 2;
a[2] = 3;
for (i=3; i<38; i++) { //Где-то в цикле ошибка... Не обращайте внимание на 38, мне так удобнее, ниже есть break...
a[i] = a[i-1]+a[i-2]+a[i-3];
if (a[i]%3==0) b++;
if (i==37) {
break;
}
}
printf("%d\n", a[37]); //Выводит 1618915236
printf("%d\n", b); //Выводит 11
}
return 0;
Можно готовый ответ, все что можно думать уже придумал...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2010, 14:25
Ответы с готовыми решениями:

В восьмеричной 123-102030
Из целого числа получить новое путем вставки после каждой цифры 0 (231457 -&gt; 2030405070). #...

Найти и вывести на экран последовательности из семи элементов, начинающихся на 123
найти и вывести на экран последовательности из семи элементов начинающихся на 123****

Найти число среди цифр которого есть 2 и 3 и перевернуть его(123=321) (массив) С
Программа считает не верно. Подскажите что надо исправить? int d,i,h=0,b; ...

Заменить "чтото типо <123>123</123>" на "чтото", предварительно подставив перед "чтото" текст между тегов из "чтото типо <123>123</123>"
в html разметке есть чтото типо &lt;123&gt;123&lt;/123&gt; как с помощью регулярки, все это заменить на чтото...

9
57 / 57 / 5
Регистрация: 31.10.2010
Сообщений: 103
03.11.2010, 14:35 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main()
{
    int i, j = 1, a[37] = {1,2,3};
 
    for (i = 3; i < 37; ++i)
    {
        a[i] = a[i - 1] + a[i - 2] + a[i - 3];
        j += (int)(a[i] % 3 == 0);
    }
 
    printf("Element 37 = %d\nCount = %d\n", a[36], j);
 
    return 0;
}
Добавлено через 4 минуты
Я к тому что все правильно, только элемент надо брать a[36] это как раз 37-ой по порядку элемент.
0
147 / 81 / 23
Регистрация: 17.10.2010
Сообщений: 939
03.11.2010, 14:38 3
KpeHDeJIb получается, что 37 элемент большое по модулю число со знаком минус??????
0
14 / 14 / 5
Регистрация: 02.03.2010
Сообщений: 29
03.11.2010, 15:19 4
Инта здесь мало для таких больших чисел. Long int должно хватить, но у меня почему то не вишло, вот с float :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main() {
int i, b=1; //Так как 3 уже кратно 3
float a[38];
a[0] = 1.;
a[1] = 2.;
a[2] = 3.;
for (i=3; i<38; i++) { //Где-то в цикле ошибка... Не обращайте внимание на 38, мне так удобнее, ниже есть break...
a[i] = a[i-1]+a[i-2]+a[i-3];
if ((int)a[i]%3==0) b++;
 
}
printf("%.0f\n", a[37]); //Выводит 1618915236
printf("%d\n", b); //Выводит 11
return 0;
}
1
180 / 181 / 55
Регистрация: 08.04.2009
Сообщений: 1,309
03.11.2010, 15:27 5
Цитата Сообщение от isaak Посмотреть сообщение
KpeHDeJIb получается, что 37 элемент большое по модулю число со знаком минус??????
Мож поэтому и
Цитата Сообщение от i.c Посмотреть сообщение
СУПЕРПОСЛЕДОВАТЕЛЬНОСТЬ 123
хотя канеш эт какой-то глюк
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
#include <stdio.h>
#include <conio.h>
#include <iostream>
int main()
{
        int i, j = 1,k=3;
        long a[50];
       
        a[0] = 1;
        a[1] = 2;
        a[2] = 3;
        
        for (i = 3; i < 50; i++)
        {
                a[i] = a[i-2] + a[i-1] + a[i-3];
                printf("Element  = %d    N = %d\n",a[i],k);
                k++;
                j += (int)(a[i] % 3 == 0);
        }
        printf("Element 37 = %d\nCount = %d\n", a[36], j);
 
 
getch();
}
Добавлено через 6 минут
Причем 36 элемент правильно считает, сбоить начинает как раз на 37 =)
1
57 / 57 / 5
Регистрация: 31.10.2010
Сообщений: 103
03.11.2010, 15:37 6
Цитата Сообщение от vet Посмотреть сообщение
Причем 36 элемент правильно считает, сбоить начинает как раз на 37 =)
Ну я не считал, можно использовать unsigned int, если и его мало то уже uint64_t который находится в stdint.h

Добавлено через 3 минуты
Цитата Сообщение от archinko Посмотреть сообщение
Инта здесь мало для таких больших чисел. Long int должно хватить, но у меня почему то не вишло, вот с float :
long int это синоним для long, который в свою очередь у вас наверняка равен по размеру int. Можно использовать unsigned long long или uint64_t, тогда в printf для VC или gcc для вывода надо использовать %I64u
1
609 / 89 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
04.11.2010, 09:17  [ТС] 7
Вы все не правы:

Код
root@ubuntu:~# g++ zadacha.cpp
root@ubuntu:~# ./a.out
59138826249
root@ubuntu:~# g++ zadacha.cpp
root@ubuntu:~# ./a.out
Element 37 = -1079654341
Count = 17
Элемент 37 должен быть равен трем с чем то миилионам, а Count должен быть равен 3.

Добавлено через 23 минуты
Но как этого достичь...
0
Заблокирован
04.11.2010, 09:43 8
если смысл в том, чтоб обойти глючность получения 37 элемента, то можно написать так
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
#include<iostream>
#include <stdio.h>
int main() 
{
    int i; 
    unsigned long a[37];
    a[0] = 1;
    a[1] = 2;
    a[2] = 3;
    for (i=3; i<37; i++) 
    { 
        a[i] = a[i-1]+a[i-2]+a[i-3];
        printf("%d=%d\n",i+1, a[i]); 
    }
    int z=a[33]%100+a[34]%100+a[35]%100;
    a[33]/=100;a[34]/=100;a[35]/=100;
    a[35]+=z/100;
    z%=100;
    a[36]=a[33]+a[34]+a[35];
    printf("\n37 = %d%d\n", a[36],z); 
    printf("count = %d\n", i/3); 
    system("pause");
    return 0;
}
конечно, z можно впихнуть в цикл,
а вместо 100 написать половинную степень от степени maxlong
тогда можно будет вычислить и следующие элементы последовательности
1
Бродяга
312 / 266 / 56
Регистрация: 27.08.2010
Сообщений: 553
04.11.2010, 09:52 9
Цитата Сообщение от i.c Посмотреть сообщение
Элемент 37 должен быть равен трем с чем то миилионам, а Count должен быть равен 3.
Как вы подсчитали?
Сделал с double, вроде на правду похоже:
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
    int i, j = 1,k=3;
    double a[50];
 
    a[0] = 1;
    a[1] = 2;
    a[2] = 3;
 
    for (i = 3; i < 50; i++)
        {
        a[i] = a[i-1] + a[i-2] + a[i-3];
        if (fmod(a[i],3) == 0)
        {
            ++j;
            printf("*");
        }
        printf("Element[%d]  = %.lf\n",k,a[i]);
        ++k;
 
    }
    printf("Element 37 = %.lf\nCount = %d\n", a[36], j);
 
    getch();
    return 0;
}
2
Заблокирован
04.11.2010, 10:02 10
dihlofos, твой вариант лучше, да и с count я протупил
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2010, 10:02

Почему композиция циклов (123) и (123) равна циклу (132)
Я это увижел в 25 лекции Савватеева из курса &quot; 100 уроков математики&quot;, примерно на 15 минуте.

I/O 123
из-за чего может появляться данная ошибка и как с ней можно бороться?

Генератор Г3-123
Умудрился спалить сие чудо. Вначале был самовозбуд по высокой части - выдавал аж 2.5 Мгц После...

Вычислить 7^123
Помогите пожалуйста.


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

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

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