Форум программистов, компьютерный форум CyberForum.ru

Задача "Натуральный ряд чисел" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шаблоны http://www.cyberforum.ru/cpp-beginners/thread929196.html
Есть два класса: #include <iostream> #include <string> #include <valarray> using namespace std; template <class T1, class T2> class Pair { private: T1 a;
C++ Вывод строки в обратном порядке Тупень возвращается. Имеем функцию для чтения массива в обратном порядке. Смысл ясен, но требуются пояснения в деталях. void print_reverse(char *s) { size_t len = strlen(s); char *t=s + len - 1; // почему мы в правой части выражения к массиву s добавляем уменьшенную на единицу длину //// массива s ? почему мы складываем массив с числом ? while (t >= s) { printf("%c", *t); http://www.cyberforum.ru/cpp-beginners/thread929181.html
C++ Задача "Сокобан"
Ограничение времени: 5.0 секунды Ограничение памяти: 64 МБ Программист Стас на время отпуска устроился поработать в японскую компьютерную фирму Thinking Rabbit. Сначала идея казалась замечательной — и на халяву съездить за границу, и заработать, и набраться опыта у японских коллег. Но оказалось, что программисты без знания японского фирме не нужны, и Стаса отправили работать кем-то вроде...
Программа из книги, в которой осуществляется вызов двух функций не работает C++
Может кто поможет, не работает программа с книги "Моя первая программа на С/С++" А.Нейбауэр (Листинг 7.1. Программа, в которой осуществляется вызов двух функций.) Я уже понял что книжку для начала я выбрал слишком древнюю, ошибок в ней тоже не мало, но распечатал, дочитать надо, та и с нуля в ней не плохо все разжёвано, даже местами слишком. Программа ругается на функцию question() если добавлять...
C++ Запись/чтение структур (файлы) + разница между FILE * и <fstream> http://www.cyberforum.ru/cpp-beginners/thread929077.html
Всем привет. Порыскал по форуму, погуглил... Решения есть, но они не ясны (что, почему да как) и не все работают. Однако, я так и не нашёл конкретных и ясных объяснений по-этому поводу. И т.к. в С++ я пока конкретный чайник (и видать ещё надолго), буду очень признателен если кто-либо сможет объяснить Коболисту всю эту канитель на пальцах... И так, к делу! Первое, что я так и не понял: возможно...
C++ Список С++ Доброго времени суток всем. Возник вопрос, как его решить не знаю. Те кто знаком c python знают, что там есть такая штука как "list". В нем можно хранить объекты любых типов. Вставл вопрос, а как такое на С++ реализуется а еще лучше, возможно ли? template<typename T> class List { private: T data; List<T>* next; public: //и дальше по тексту } подробнее

Показать сообщение отдельно
Catstail
Модератор
22313 / 10718 / 1742
Регистрация: 12.02.2012
Сообщений: 17,792
28.07.2013, 11:20     Задача "Натуральный ряд чисел"
Судя по "высокой практической ценности", это типичная олимпиадная задача. Захотелось попробовать решить ее без привлечения строк. И вот что получилось (число вводится с клавиатуры; для сути алгоритма это совершенно неважно). Не уверен, что уложится в 1 сек, но вот по памяти уложится с гарантией.

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
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream.h>
int SCurr=1,Pos=1;
int Arr[10],Ptr=0;
int NextDigit()
{
    int i,r,c;
    Pos++;
    if (Ptr == 0)
    {
        c=SCurr++;
        for (i=1; i<=10; i++) Arr[i]=0;
        for (i=1; i<=10; i++)
        {
            r=c % 10;
            Arr[Ptr++]=r;
            c=c / 10;
            if (c == 0) break;
        }
    }
    return Arr[--Ptr];
}
int main(int argc, char* argv[])
{
    int i,p,N,c,r,d,q;
    int digs[4];
    cout << "Enter number: ";
    cin >> N;
    c=N;
    p=0;
    for (i=1; i<=4; i++)
    {
        if (c==0) break;
        r=c % 10;
        digs[p++]=r;
        c=c / 10;
    }
    q=1;
    for (i=1; i < 2147483648; i++)
    {
        d=NextDigit();
        while(1)
        {
            if (d == digs[p-q])
            {       
                q++;
                if (q > p) break;
                d=NextDigit();
            }
            else
            {
                q=1;
                break;
            }
        }
        if (q > 1)
        {
            cout << Pos-q+1 << endl;
            break;
        }
    }
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru