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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
4aineg
0 / 0 / 0
Регистрация: 07.08.2008
Сообщений: 23
#1

последовательности Аршона - C++

28.09.2008, 22:28. Просмотров 1164. Ответов 3
Метки нет (Все метки)

здравствуйте! пытаюсь решить задачу про последовательности Аршона, но чето не выходит. Вы вообще слышали о таком задании?
вобщем выделяется массив с регулированной длиной он заполняется определенными символами, например (0,1,2). нужно заполнить так, чтобы любые 2 последовательности были разные. примерный порядок заполнения сначала 0, 00-не подходит, меняем 01, 010- подходит, 0101-не подходит, меняем 0102 и т.д.
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
using namespace std;
 
class Sequence
{
 
private:
 
    int *PutArsh;
    int length;
 
public:
 
    Sequence(int ln)
    {
        length = ln;
        PutArsh = new int[length];
        int i;
        for(i=0; i<length; i++)
            PutArsh[i]=0;
    }
 
    bool GoodPosition(int PutElem, int Index)
    {
        int Sum = 0;
        int temp;
        for (int i=0; i<Index; i++)
            temp = PutArsh[Index-1];
        if (PutElem != temp)
        {
            for (int j=Index; j<0; j--)
            {
                if (PutArsh[j] == PutArsh[Index/2-j])
                    Sum++;
            }
            if (Sum != Index/2)
                return true;
            else
                return false;
        }
        else
            return false;
    }
 
    void AddArshElement()
    {
        int i = 1;
        while (i>0 && i < length)
        {
            if (GoodPosition(PutArsh[i], i))
                i++;
            else
            {
                if (PutArsh[i] < 2)
                    PutArsh[i]++;
                else 
                {
                    PutArsh[i]=0;
                    i--;
                }
            }
        }
        for (int i=0; i<length; i++)
        cout << PutArsh[i] << " ";
        cout << endl;
    }
 
    ~Sequence()
    {
        delete [] PutArsh;
    }
 
};
 
#pragma once
#include "Sequence.h"
int main()
{
    int length;
    cout << "Enter length: ";
    cin >> length;
    cout << endl;
    Sequence seq(length);
    cout << "Arshon's sequence: " << endl;
    seq.AddArshElement();
 
    return 0;
}
в итоге почему то заполняет все 0-ми
заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2008, 22:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос последовательности Аршона (C++):

Найти, сколько членов первой последовательности совпадает с членами второй последовательности - C++
Даны две последовательности целых чисел а1 и а2 an и b1 и b2 bn. Все члены последовательностей различные числа. Найти, сколько членов...

В последовательности Фибоначчи найти индекс члена последовательности, удовлетворяющего условию - C++
помогите не могу найти ошибку вводится число A,найти номер К такого числа Фибоначчи ,что Xк-1&lt;=A&lt;Xк. #include &lt;iostream&gt; ...

Построить элементы в убывающей последовательности и вывести первоначальные индексы последовательности - C++
Здравствуйте, уважаемые форумчане!! Помогите разобраться с лабораторной работой Задача -&gt; Построить элементы в убывающей...

В последовательности найти числа, которые близки к числам другой последовательности - C++
даны две последовательности чисел A = {a1, a2,…, an}, B = {b1, b2, …, bn},напечатать те и только те числа aj из последовательности A, для...

Массив. Найти, сколько членов первой последовательности совпадает с членами второй последовательности - C++
Всем привет! Нужна помощь в решении задачки. Вот её условие: Даны две последовательности целых чисел а1, а2,..., аn и b1, b2,...,...

Вывод последовательности, определяющий, являются ли простыми/совершенными соответствующие элементы введённой последовательности - C++
Никак не приходит в голову, как составить алгоритм, реализующий проверку на то, является ли число простым и является ли совершенным. Если...

3
qwone
9 / 9 / 1
Регистрация: 18.08.2008
Сообщений: 129
28.09.2008, 23:12 #2
это материал по последовательности Аршона
http://school-collection.edu.ru/cata...31254ede/view/

Автор ты это имел ввиду!?
1
4aineg
0 / 0 / 0
Регистрация: 07.08.2008
Сообщений: 23
08.10.2008, 22:55  [ТС] #3
я переделал у меня до 8 элемента нормально строит потом снова ошибки, дайте совет пожалуйста как лучше сделать
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
using namespace std;
 
class Sequence
{
 
private:
 
    int *PutArsh;
    int length;
 
public:
 
    Sequence(int ln)
    {
        length = ln;
        PutArsh = new int[length];
        int i;
        for(i=0; i<length; i++)
            PutArsh[i]=0;
    }
 
    bool GoodPosition(int PutElem, int Index)
    {
        int Sum = 0;
        int temp;
        temp = PutArsh[Index-1];
        if (PutElem != temp)
        {
            if(Index%2 != 0)
            {
                for (int j=Index; j>Index/2; j--)
                {
                    if (PutArsh[j] == PutArsh[j-(Index/2+1)])
                        Sum++;
            }
            if (Sum != (Index+1)/2)
                return true;
            else
                return false;
            }
            else
                return true;
        }
        else
            return false;
    }
 
    void AddArshElement()
    {
        int i = 1;
        while (i>0 && i < length)
        {
            if (GoodPosition(PutArsh[i], i))
                i++;
            else
            {
                if (PutArsh[i] < 2)
                    PutArsh[i]++;
                else 
                {
                    PutArsh[i]=0;
                    i--;
                }
                
            }
        }
        for (int i=0; i<length; i++)
        cout << PutArsh[i] << " ";
        cout << endl;
    }
 
    ~Sequence()
    {
        delete [] PutArsh;
    }
 
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Main.cpp
 
#pragma once
#include "Sequence.h"
int main()
{
    int length;
    cout << "Enter length: ";
    cin >> length;
    cout << endl;
    Sequence seq(length);
    cout << "Arshon's sequence: " << endl;
    seq.AddArshElement();
 
    return 0;
}
0
qwone
9 / 9 / 1
Регистрация: 18.08.2008
Сообщений: 129
09.10.2008, 22:59 #4
4aineg как тебе объяснить . Во-первых немного неправильно ты начал писать программу,в ней тяжело вылавливать алгоритм . Я написал свою . Рабочая . Но честно я так и не понял как эта последовательность не совпадает
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
#include <iostream>
using namespace std;
 
class Sequence{
private:
    int *PutArsh;
    int length;
    int len; // скрытая длина так как подсчет идет тройками
    void make();// функция создающая последовательность Аpшона
public:
    Sequence(int ln=0){  // конструктор 
        length = ln;
        len=ln+3;
        PutArsh = new int[len]; 
        make();
        };
    ~Sequence(){delete [] PutArsh;};// деструктор
    void viev();
};
void Sequence::make(){
    PutArsh[0]=1;PutArsh[1]=2;PutArsh[2]=3;
    int n=1,m; // ряд начинается с 0 и поэтому чет/нечет меняются местами 
    for(m=3;m<length;m+=3,n++){
        if (n%2!=0){
            if (PutArsh[n]==1) {PutArsh[m]=3;PutArsh[m+1]=2;PutArsh[m+2]=1;}
            if (PutArsh[n]==2) {PutArsh[m]=1;PutArsh[m+1]=3;PutArsh[m+2]=2;}
            if (PutArsh[n]==3) {PutArsh[m]=2;PutArsh[m+1]=1;PutArsh[m+2]=3;}
            }
        else {
            if (PutArsh[n]==1) {PutArsh[m]=1;PutArsh[m+1]=2;PutArsh[m+2]=3;}
            if (PutArsh[n]==2) {PutArsh[m]=2;PutArsh[m+1]=3;PutArsh[m+2]=1;}
            if (PutArsh[n]==3) {PutArsh[m]=3;PutArsh[m+1]=1;PutArsh[m+2]=2;}
            }
        }
}
void Sequence::viev(){         // показ последовательности
    for (int i=0;i<length;i++)
        cout<<" "<<PutArsh[i];
    cout<<"\n";
}
 
int main(){
    int length=12;
    // cout << "Enter length: ";
    // cin >> length;
    Sequence seq(length);
    cout << "\nArshon's sequence: \n" ;
    seq.viev();
    return 0;
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2008, 22:59
Привет! Вот еще темы с ответами:

Найти сумму элементов последовательности, начиная от первого отрицательного элемента и до конца последовательности. - C++
Помогите написать простенькую программку :( Найти сумму элементов последовательности x1, x2, …, xn (x&lt;=30), начиная от первого...

Даны две последовательности. Верно ли, что все члены второй последовательности входят в первую? - C++
Даны две последовательности a^1,a^2,...,a^n, b^1,b^2,...,b^n (m&lt;n). В каждой из них члены различны. Верно ли, что все члены второй...

Даны две последовательности.Верно ли, что все числа второй последовательности входят в первую. - C++
Даны две последовательности {a}_{1},{a}_{2},...,{a}_{n} и {b}_{1},{b}_{2},...,{b}_{m} (m&lt;n). В каждой из них числа различны. Верно ли,...

Каждое простое число последовательности увеличить в два раза, посчитать количество простых чисел в исходной последовательности - C++
Вводится последовательность из N целых чисел. Каждое простое число последовательности увеличить в два раза, посчитать количество простых...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
09.10.2008, 22:59
Ответ Создать тему
Опции темы

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