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

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

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

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

28.09.2008, 22:28. Просмотров 1158. Ответов 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-ми
заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2008, 22:28     последовательности Аршона
Посмотрите здесь:

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

Поиск максимальной последовательности в другой последовательности - C++
Доброго времени суток. Решая эту задачу, наткнулся на небольшую проблему... Не знаю, как точно описать ее в двух словах, поэтому покажу...

Сформировать новые последовательности, состоящие из четных и нечетных элементов исходной последовательности - C (СИ)
Дана последовательность из n целых элементов. Сформировать две новых последовательности, состоящих соответственно из четных и нечетных (по...

Ввод последовательности и вывод той же последовательности по возрастанию чисел - PascalABC.NET
Нужно создать программу которая при вводе последовательности выводит ту же последовательность по возрастанию чисел ... Нужно в течении...

Определите закономерность формирования членов последовательности. Найдите N-ый член последовательности,сократив количество рекурсивных вызовов - PascalABC.NET
Определите закономерность формирования членов последовательности. Найдите N-ый член последовательности,сократив количество рекурсивных...

Признаком конца числовой последовательности является число 0. Найти среднее орифметическое положительных элементов последовательности. - Pascal
Всем привет! Помогите пожалуйсто написать программу к задаче!!! Признаком конца числовой последовательности является число 0. Найти среднее...

Выяснить, имеются ли в последовательности S1, S2, ., Sn такие члены последовательности Si и Si+1 - Lazarus
Даны символы S1, S2, ..., Sn (вводятся одной строкой). Выяснить, имеются ли в последовательности S1, S2, ..., Sn такие члены...

Вычислить сумму тех элементов последовательности, номера которых совпадают со значениями элементов последовательности - Pascal
Пожалуйста, помогите! Нифига не шарю в программировании. Тут такая задачка: &quot;Дана последовательность из n вещественных чисел. Вычислить...

Из заданной последовательности сформировать 3 последовательности - Matlab
Из заданной последовательности сформировать 3 последовательности, содержащие только положительные, только отрицательные и только нулевые...

Найти 5 в последовательности и сумму последовательности - C (СИ)
Даны натуральные числа А1,А2...Аn.Признак конца последовательности 222.Найти 5 в последовательности и сумму последовательности


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

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

Автор ты это имел ввиду!?
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;
}
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;
}
Yandex
Объявления
09.10.2008, 22:59     последовательности Аршона
Ответ Создать тему
Опции темы

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