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

Сжать массив, удалив из него элементы, имеющие одинаковые старшую и младшую цифры - C++

Восстановить пароль Регистрация
 
gigder
 Аватар для gigder
3 / 3 / 0
Регистрация: 28.09.2012
Сообщений: 33
21.12.2013, 20:46     Сжать массив, удалив из него элементы, имеющие одинаковые старшую и младшую цифры #1
Вот как я пытался сделать это

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
#include <iostream>
 
using namespace std;
 
int  main()
{
    int n,i,j,y,x;
    int massiv[n]; 
    cout << "Vvedite n: ";
    cin >> n;
    y=1;
    int massiv_shatiy[n];
    for (i=0; i<=n-1; i++)
     {
      cout << "Vvedite x: ";
      cin >> massiv[i];
      x=massiv[i];
      //nahodim starshyu stepen'
      while(x/y > 0) y=y*10;
      //nahodim ementi 121,343 i t.p.
      int t=0;
      for(j = 0; j<i+1; j++)
      {
        if(x%10 != x/(y/10))
        {
          massiv_shatiy[t]= x;   
         t++;        
        }
        
      }
   }   
 
 cout << "Shatiy massiv" << massiv_shatiy[n] << endl;
 
system("PAUSE");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2013, 20:46     Сжать массив, удалив из него элементы, имеющие одинаковые старшую и младшую цифры
Посмотрите здесь:

C++ Сжать массив, удалив из него все элементы, величина которых находится в интервале [a,b]
Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b] C++
Сжать массив, удалив из него элементы, модуль которых находится в заданном интервале C++
Сжать массив, удалив из него все элементы, которые лежат в интервале [a,b]. Освободившиеся в конце элементы массива заполнить нулями. C++
Сжать массив, удалив из него все элементы, модуль которых не превышает 1. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
21.12.2013, 21:05     Сжать массив, удалив из него элементы, имеющие одинаковые старшую и младшую цифры #2
gigder, а как это вообще компилируется?
Цитата Сообщение от gigder Посмотреть сообщение
int n,i,j,y,x;
* * int massiv[n];
здесь N не константа, по идее не должно работать вообще.

Зачем внутренний цикл j от 0 до i+1 я понять не могу, а алгоритм "сжатия" вроде верный. Единственное что нужно y = 1; поставить сразу после "{" цикла по i от 0 до n-1
gigder
 Аватар для gigder
3 / 3 / 0
Регистрация: 28.09.2012
Сообщений: 33
21.12.2013, 21:32  [ТС]     Сжать массив, удалив из него элементы, имеющие одинаковые старшую и младшую цифры #3
Цитата Сообщение от nexen Посмотреть сообщение
а как это вообще компилируется
Меня все спрашивают - как это компилируется?!)
Я не знаю как, но у меня компилируется(у меня Dev C++).
Переделал, все работает.
Вставлю код, может, кому понадобится)
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
#include <iostream>
 
using namespace std;
 
int  main()
{
    int n,y,x;
    int massiv[100]; 
    cout << "Vvedite n: ";
    cin >> n;
    int massiv_shatiy[100];
    int t=0;
    for (int i=0; i<=n-1; i++)
     {
      y=1;
      cout << "Vvedite x: ";
      cin >> massiv[i];
      x=massiv[i];
      //nahodim starshyu stepen'
      while(x/y > 0) y=y*10;
      //nahodim ementi 121,343 i t.p.
      for(int j = 0; j<n-1; j++)
      {
        if(x%10 != x/(y/10))
        {
          massiv_shatiy[t]= x;   
          t++;        
        }
        
      }
   }   
 for(int f = 1; f< t; f++)
 cout << "Massiv2: " << massiv_shatiy[f] << endl;
 
system("PAUSE");
}
Добавлено через 14 минут
Цитата Сообщение от gigder Посмотреть сообщение
for(int f = 1; f< t; f++)
*cout << "Massiv2: " << massiv_shatiy[f] << endl;
Не очень корректно работает вывод...
Например, n=5, massiv={123,125,1234,111,124}
Выводит:
massiv2:123 3 раза
massiv2:125 3 раза
massiv2:1234 4 раза
massiv2:124 3 раза
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
21.12.2013, 21:38     Сжать массив, удалив из него элементы, имеющие одинаковые старшую и младшую цифры #4
gigder,
Потому что, во-первых, индексация с 0, а не с 1 (при выводе).
Во-вторых, вы не убрали внутренний массив, как я вам сказал.
Вот отредактированная версия. Так же можно обойтись без первого массива, поэтому я его удалил.
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 <iostream>
 
using namespace std;
 
int  main()
{
    int n,y,x;
    cout << "Vvedite n: ";
    cin >> n;
    int massiv_shatiy[100];
    int t=0;
    for (int i=0; i<n; i++)
     {
      y=1;
      cout << "Vvedite x: ";
      cin >> x;
      //nahodim starshyu stepen'
      while(x/y > 0) y=y*10;
      //nahodim ementi 121,343 i t.p.
        if(x%10 != x/(y/10))
        {
          massiv_shatiy[t]= x;   
          t++;        
        }
   }   
 for(int f = 0; f< t; f++)
 cout << "Massiv2: " << massiv_shatiy[f] << endl;
 
system("PAUSE");
}
gigder
 Аватар для gigder
3 / 3 / 0
Регистрация: 28.09.2012
Сообщений: 33
21.12.2013, 21:49  [ТС]     Сжать массив, удалив из него элементы, имеющие одинаковые старшую и младшую цифры #5
Хм, да, вложенный цикл был не нужен. Спасибо Вам большое!
Yandex
Объявления
21.12.2013, 21:49     Сжать массив, удалив из него элементы, имеющие одинаковые старшую и младшую цифры
Ответ Создать тему
Опции темы

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