С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 11.12.2016
Сообщений: 51
1

Продублировать элементы массива превосходящие заданное число

24.12.2016, 18:28. Показов 1392. Ответов 1

Author24 — интернет-сервис помощи студентам
Даны натуральные числа N, Х, K и массив из N целых чисел. Требуется продублировать каждый элемент массива, превосходящий Х (т.е. вставьте рядом такой же элемент). Полученный в результате массив циклически сдвинуть на K элементов влево.

Формат входных данных

В первой строке заданы три числа N, Х, K (1 <= N <= 10000, K <= 109). В следующей строке задано N целых чисел, разделенных одним пробелом, – элементы массива. Х и элементы массива не превосходят по модулю 1000.

Формат выходных данных

В первой строке выведите число M – количество получившихся элементов. Во второй строке выведите M чисел, разделенных одним пробелом, измененный массив.



Пример входных данных

10 2 4
6 2 7 3 8 -2 4 9 2 3

Пример выходных данных

17
7 3 3 8 8 -2 4 4 9 9 2 3 3 6 6 2 7

Решил задачу ,но она в начале был лимит времени Вот код:
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
#include<iostream>
using namespace std;
int main(){
long long n,k,x,cis[100000],i,i2,j,tmp,j1;
cin>>n>>x>>k;
for(i=1;i<=n;i++){
    cin>>cis[i];
}
for(i=n;i>0;i--){
    if(cis[i]>x){
        ++n;
        for(i2=n;i2>i;--i2)cis[i2]=cis[i2-1];
    }
}
 
for (j=1;j<=k;j++){
    tmp=cis[1];
    for(j1=1;j1<=n-1;j1++){
        cis[j1]=cis[j1+1];
        cis[n-1]=tmp;
    }
}
cout<<j1<<endl;
for(i=1; i<=n-2;i++)cout<<cis[i]<<" ";
}

Затем я изменил её,но стале вообще не правильно .Вот код:
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
#include<iostream>
 
using namespace std;
 
int main(){
 
long long n,k,x,cis[100000],new1[10000],i,i2,j,tmp,j1,p,l;
cin>>n>>x>>k;
for(i=1;i<=n;i++){
    cin>>cis[i];
 
p=0;
new1[p]=cis[i];
p++;
if (cis[i]>x) {
new1[p]=cis[i];
p++;
}
 
}
 
for(int kl=1;kl<=k;kl++){
        tmp=new1[1];
for (int l = 1; l<=n-1; l++)
        new1[l]= new1[l+1] ;
        new1[n]=tmp;}
 
cout<<l<<endl;
for(l=1; l<=n;l++)cout<<new1[l]<<" ";
 
}
Пожалуйста помогите решить мне задачу !!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2016, 18:28
Ответы с готовыми решениями:

Напечатать все простые числа, не превосходящие заданное число M
Люди добрые помогите разобраться вот с этим.. может кто поможет с решением столь не легкой задачи....

Вывести все простые числа, не превосходящие заданное число M
Вывести все простые числа, не превосходящие заданное число M.

Вывести все совершенные числа не превосходящие заданное число
Дано натуральное число P. Вывести все совершённые числа не превосходящие P. Необходимо...

Вывести квадраты натуральных чисел не превосходящие заданное число
По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в...

1
76 / 73 / 67
Регистрация: 18.09.2015
Сообщений: 234
24.12.2016, 19:14 2
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
#include <string>
#include <deque>
#include <iostream>
using namespace std;
 
int digit(char c)
{
    char tmp[2];
    tmp[0] = c;
    return atoi(tmp);
}
 
void main() 
{
    setlocale(0, "rus");
 
    deque <int> v;
 
    int N, X, K;
    cin >> N >> X >> K;
 
    string tmp;
    cin.get();
    getline(cin, tmp);
    
    int i = 0;
    while (tmp[i] != '\0')
    {
        if (tmp[i] != ' ')
            v.push_back(digit(tmp[i]));
        i++;
    }
 
    if (v.size() < N)
        cout << "Слишком мало элементов" << endl;
    else
        v.erase(v.begin() + N, v.end());
 
    for (int i = 0; i < v.size(); i++)
        if (v[i] > X)
        {       
            v.insert(v.begin() + i, v[i]);
            i++;
        }
 
    cout << endl << "После дублирования (больше " << X << ")" << endl;
    for (int i = 0; i < v.size(); i++)
        cout << v[i] << " ";
 
    while (K >= v.size()) K -= v.size();
 
    //смещение влево
    if (K != 0)
    {
        deque <int> tmp;
        for (int i = 0; i < K; i++)
        {
            v.push_back(v[0]);
            v.erase(v.begin());
        }
    }
 
    cout << endl << "Всего элементов" << endl << v.size() << endl;
    cout << "После смещения на: " << K << endl;
    for (int i = 0; i < v.size(); i++)
        cout << v[i] << " ";
    cout << endl;
}
0
24.12.2016, 19:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2016, 19:14
Помогаю со студенческими работами здесь

В выходную последовательность записать числа по абсолютной величине превосходящие заданное число
Задача 3: В выходную последовательность записать только числа, по абсолютной величине превосходящие...

Умножить все элементы массива на заданное число
Умножить все элементы миссива на заданное число

Все положительные элементы массива уменьшить на заданное число
Нам дали задачу, а я не понимаю как написать к ней код. Помогите кому не лень:3 Задача: Дан...

Cдвинуть элементы массива X на заданное число K позиций влево
Братишки помогите пожалуйста. 12. Дан массив X из 10 чисел. Воспользовавшись вспомогательным...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru