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

Вставить нуль перед k-тым элементом последовательности - C++

Восстановить пароль Регистрация
 
nyashanyasha
0 / 0 / 0
Регистрация: 30.03.2012
Сообщений: 7
30.03.2012, 15:16     Вставить нуль перед k-тым элементом последовательности #1
Прошу помочь с задачей:
Дана последовательность целых чисел. Перед каждым k-тым элементом по счету вставить 0.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2012, 15:16     Вставить нуль перед k-тым элементом последовательности
Посмотрите здесь:

C++ Вставить в вектор новый элемент перед элементом с заданным индексом
Вставить 0 перед n-м элементом последовательности C++
В массиве вставить нуль после первого нечетного элемента и единицу перед последним четным элементом C++
C++ Перед указанным элементом массива вставить новый элемент
Перед элементом массива с порядковым номером K вставить новый элемент C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,196
Завершенные тесты: 1
30.03.2012, 15:52     Вставить нуль перед k-тым элементом последовательности #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
const int N=10;
int x[2*N]={1,2,3,4,5,6,7,8,9,10};
int k;cin>>k;if(k<2)k=2;
for(int i=0;i<N;i++)
{
     if(i%k==0)
     {
        for(int j=N;j>i;j--)
             x[j]=x[j-1];
         N++;x[i]=0;
     }
}
nyashanyasha
0 / 0 / 0
Регистрация: 30.03.2012
Сообщений: 7
30.03.2012, 16:06  [ТС]     Вставить нуль перед k-тым элементом последовательности #3
Большое спасибо. Но если нетрудно, поясните свой код комментарием, мне это очень поможет.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 16:12     Вставить нуль перед k-тым элементом последовательности #4
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
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int n;
    cout<<"How much elements? ";
    cin>>n;
    int *a=new int[n];
    srand(time(NULL));
    cout<<"a[] = ";
    for (int i=0;i<n;i++)
     {
      a[i]=rand()%100;
      cout<<a[i]<<" ";
     }
    int k;
    cout<<"\nInput k ";
    cin>>k;
    int *b=new int[n+n/(k-1)-1];
    int count=0;
    for (int i=0;i<n;i++)
     {
      if (i%(k-1)==0 && i!=0) { b[i+count]=0; count++;} 
      b[i+count]=a[i];
     }
    delete [] a;
    cout<<"b[] = ";
    for (int i=0;i<n+n/(k-1)-1;i++)
     {
      cout<<b[i]<<" ";
     }
    cout<<"\n";    
    delete [] b;
    system("pause");
    return 0;
}
nyashanyasha
0 / 0 / 0
Регистрация: 30.03.2012
Сообщений: 7
30.03.2012, 19:00  [ТС]     Вставить нуль перед k-тым элементом последовательности #5
Nekto,
Я что-то запуталась, нужна Ваша помощь, вот с этими строчками, как они читаются?:
C++
1
2
3
4
   {
      if (i%(k-1)==0 && i!=0) { b[i+count]=0; count++;} 
      b[i+count]=a[i];
     }
Если остаток от деления i на к-1 и i не равно нулю, то дальше не поняла к чему присваивается нулевое значение? Как прочитать строку правильно? =(
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 19:09     Вставить нуль перед k-тым элементом последовательности #6
Цитата Сообщение от nyashanyasha Посмотреть сообщение
Nekto,
Я что-то запуталась, нужна Ваша помощь, вот с этими строчками, как они читаются?:
C++
1
2
3
4
   {
      if (i%(k-1)==0 && i!=0) { b[i+count]=0; count++;} 
      b[i+count]=a[i];
     }
Если остаток от деления i на к-1 и i не равно нулю, то дальше не поняла к чему присваивается нулевое значение? Как прочитать строку правильно? =(
в переменной count хранится количество нулей, которые уже были вставлены. Массив b будет больше массива a на этот count. Когда (i%(k-1)==0 && i!=0), то нужно вставить 0 + увеличить счетчик count на 1. Цикл прогоняется n раз, поэтому в любом случае (независимо от того, вставлялся ноль или нет на этой итерации) вставляется одно число из массива а в массив b, оно находится по индексу i+count.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2012, 21:29     Вставить нуль перед k-тым элементом последовательности
Еще ссылки по теме:

C++ Перед каждым положительным элементом массива вставить нулевой элемент
Вставить заданное число в массив целых чисел перед последним четным элементом C++
C++ В целочисленном массиве вставить новый элемент перед первым отрицательным элементом

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

Или воспользуйтесь поиском по форуму:
nyashanyasha
0 / 0 / 0
Регистрация: 30.03.2012
Сообщений: 7
20.04.2012, 21:29  [ТС]     Вставить нуль перед k-тым элементом последовательности #7
Извините за подъем старой темы, но почему массив *b задаётся с такими параметрами?

int *b=new int[n+n/(k-1)-1];
Объясните, пожалуйста почему именно n+n/(k-1)-1.
Yandex
Объявления
20.04.2012, 21:29     Вставить нуль перед k-тым элементом последовательности
Ответ Создать тему
Опции темы

Текущее время: 12:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru