Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
xdtab
0 / 0 / 5
Регистрация: 05.10.2016
Сообщений: 62
#1

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент - C++

21.04.2017, 11:53. Просмотров 432. Ответов 2
Метки нет (Все метки)

Помогите преобразовать код из языка С# в С++.

Занимался разбором задачи на языке С++.
Вот условие задачи: Дан целочисленный массив размерности N. Преобразовать массив, увеличив каждую его серию на один элемент. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии - количество этих элементов (длина серии может быть равна 1).

Такой код получился на языке Pascal:

Pascal
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
program Massiv_seri9;
var
 a,b : array [1..20] of real;
 N,i,k: integer;
 
begin
 Write('N: ');
 Readln(N);
 
 Writeln('A: ');
 for i:=1 to N do
  begin
   write(i,' :');
   readln(a[i]);
  end;
 
 k:=1;
 b[k]:=a[1];
 
 for i:=2 to N do
  begin
   inc(k);
   if a[i-1]<>a[i] then
    begin
     b[k]:=b[k-1];
     inc(k);
    end;
   b[k]:=a[i];
  end;
  inc(k);
  b[k]:=b[k-1];
 
  a:=b;
 
 for i:=1 to k do writeln(a[i]);
end.
Преобразовал в С#:
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>
int main(void)
{
    int a[20];
    int n;
    printf("N: ");
    scanf("%i",&n);
 
    int i;
    for (i=0; i<n; ++i){
        printf("a[%i] : ",i+1);
        scanf("%i",&a[i]);
    }
 
    int i2;
    for (i=0;i<n;++i){
        if (i+1<n){
            if (a[i+1]!=a[i]){
                ++n;
                for (i2=n-1;i2>i;--i2) a[i2]=a[i2-1];
                ++i;
            }
        }
    }
    ++n;
    a[n-1]=a[n-2];
 
    for (i=0; i<n;++i) printf("  %i : %i\n",i+1,a[i]);
    return 0;
}
Может кто нибудь помочь переписать задачу в С++, а то я пишу, а у меня куча багичей вылезает. Так же если есть советы как упростить решение можно, то тоже оставляйте свои комментарии.
http://www.cyberforum.ru/cpp-beginners/thread1679630.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2017, 11:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент (C++):

Дан целочисленный массив размером N. Преобразовать массив, увеличив длину каждой серии на один элемент
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() {...

Преобразовать массив, увеличив его первую серию наибольшей длины на один элемент
Ребятки, кому не сложно выручите с задачкой) Дан целочисленный массив размера...

Преобразовать массив, уменьшив каждую его серию на один элемент.
Дан целочисленный массив размера N, содержащий по крайней мере одну серию,...

Преобразовать массив, увеличив первую серию наибольшей длины на один элемент
Дан массив, состоящий из n элементов. Назовем серией группу подряд идущих...

Преобразовать массив, увеличив последнюю серию наибольшей длины на один элемент
Дан целочисленный массив размера N. Назовем серией группу подряд идущих...

2
LightDays
10 / 10 / 8
Регистрация: 19.02.2017
Сообщений: 42
Завершенные тесты: 1
21.04.2017, 12:07 #2
Лучший ответ Сообщение было отмечено xdtab как решение

Решение

Привет.
1. Для языка С++ не используется библиотека
C++
1
#include <stdio.h>
Вместо нее используют
C++
1
#include <iostream>
(библиотека ввода вывода в С++)
2. Для ввода и вывода используются cin и cout соответственно (обрати внимание на направление стрелок >> и << для cin и cout)
3. using namespace std; Эта странная запись "говорит" компилятору, чтобы использовал пространство имен "std" там, где это необходимо. В С++ создано куча стандартных библиотек и все они принадлежат пространству имен std.
Если не хочешь использовать эту строчку, то можно было обращаться к методом стандартной библиотеки через пространство имен на прямую.
Например так:
C++
1
std::cout << "Hello, World!" << endl;
P.s. endl - перевод каретки на новую строку.

А так у тебя код в принципе рабочий.
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
#include <iostream>
using namespace std;
 
int main()
{
    int a[20];
    int n;
    cout << "N: ";
    cin >> n;
 
    int i;
    for (i = 0; i<n; ++i)
    {
        cout << "a[" << i + 1 << "] : ";
        cin >> a[i];
    }
 
    int i2;
    for (i = 0; i < n; ++i)
    {
        if (i + 1 < n)
        {
            if (a[i + 1] != a[i])
            {
                ++n;
                for (i2 = n - 1; i2>i; --i2) a[i2] = a[i2 - 1];
                ++i;
            }
        }
    }
    ++n;
    a[n - 1] = a[n - 2];
 
    for (i = 0; i < n; ++i)
        cout << ' ' << i + 1 << ": " << a[i] << endl;
 
    return 0;
}
1
MrGluck
Модератор
Эксперт CЭксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,240
21.04.2017, 12:07 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> v = {1, 2, 2, 3, 3, 3, 4, 5, 5};
    for (auto it = v.cbegin(); it != v.cend(); ++it)
        if (it == v.cbegin() || *it != *(it - 1))
            it = v.insert(it, *it);
    for (const auto x : v)
        std::cout << x << " ";
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2017, 12:07
Привет! Вот еще темы с решениями:

Дан целочисленный массив размера N. Вставить перед каждой его серией элемент с нулевым значением
С++ Дан целочисленный массив размера N. Вставить перед каждой его серией...

Дан массив размера n. Преобразовать его, умножив все положительные элементы на минимальный элемент
Помогите пожалуйста, очень надо.

Преобразовать массив, увеличив первую/последнюю/все серии наибольшей длины на один элемент
Вот задача Дан целочисленный массив размера N. Преобразовать массив,...

2) Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов
2) Дан целочисленный массив размера N. Найти максимальное количество его...


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

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

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