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

Два разных элемента - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
01.11.2010, 16:25     Два разных элемента #1
Дан целочисленный двумерный массив А размера n*m. Известно, что среди его элементов два и только два равны между собой. Напечатать их индексы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2010, 16:25     Два разных элемента
Посмотрите здесь:

C++ два разных массива записать последовательно в третий
Вставить два элемента после мах элемента и перед ним C++
C++ Два разных operator[]
C++ Найти два таких два таких элемента, разность модулей которых имеет максимальное значение
После каждого четного элемента массива вставить два элемента с тем же значением, после чего полученный массив отсортировать по убыванию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
04.11.2010, 21:21  [ТС]     Два разных элемента #21
ну например что означают 2 и 3 строчки и что они означают?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
05.11.2010, 01:10     Два разных элемента #22
ForEveR, а теперь то же самое изобразите на С, пожалуйста.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.11.2010, 01:43     Два разных элемента #23
M128K145, Ну про Си я ведь не говорил не правда-ли?) Это С++ способ.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
05.11.2010, 08:31     Два разных элемента #24
Цитата Сообщение от ForEveR Посмотреть сообщение
Это С++ способ.
Я знаю, вот поэтому и попросил сделать на С. Пока что более удобного варианта никто не предложил
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.11.2010, 11:37     Два разных элемента #25
M128K145, Его и не будет.
Либо заворачивать в while, что не круто.
Либо доп. переменную, что не столь красиво.
Либо goto, что тут подходит
KpeHDeJIb
 Аватар для KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
05.11.2010, 16:19     Два разных элемента #26
Цитата Сообщение от M128K145 Посмотреть сообщение
Я знаю, вот поэтому и попросил сделать на С. Пока что более удобного варианта никто не предложил
Т.е. мой вариант с вынесением функционала в отдельную процедуру это по вашему не нормальный вариант?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
05.11.2010, 17:22     Два разных элемента #27
KpeHDeJIb, разговор идет не о решении, а о выходе из вложенных for и эффективности использования goto или поиск альтернативы
KpeHDeJIb
 Аватар для KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
05.11.2010, 18:33     Два разных элемента #28
Цитата Сообщение от M128K145 Посмотреть сообщение
KpeHDeJIb, разговор идет не о решении, а о выходе из вложенных for и эффективности использования goto или поиск альтернативы
Ну так я и предложил альтернативу - написание процедуры, один из стандартных подходов в такой ситуации. Еще один это флаг, goto очень опасный оператор, впринципе в данном случае использование его допустимо, но прежде чем вставить goto лучше несколько раз подумать, не нарушит ли это execution flow всей программы, не повлечет ли за собой потенциальных трудноуловимых ошибок. Я лично вместо подобных размышлений предпочитаю обезопасить себя заранее.
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
05.11.2010, 18:35  [ТС]     Два разных элемента #29
Добавлено через 17 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#define n 2
#define m 5
 
int main ()
 
{ int i,j,a,b,c;
   int mt[n][m]={{1,2,3,4,5},
                       {1,6,7,8,9}};
 
for (i=0; i<n;i++)
for (j=0;j<m;j++)
{if (j+1!=m) {b=j+1;c=i;} else {b=0;c=i+1;}
for (a=c;a<n;a++){if (b!=j+1) {b=0;}
while(b<m){
if (mt[i][j]==mt[a][b])
{printf ("mt[%d][%d]=%d", i,j,mt[i][j]);
 printf ("\nmt[%d][%d]=%d", a,b,mt[a][b]);
}b++;}}}
 
 
return 0;
}
Исправил кое-какую неточностьhttp://codepad.org/j1YYh6eo[/QUOTE]

ребят, а эта прога вообще катируеца, не?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.11.2010, 19:57     Два разных элемента #30
Цитата Сообщение от OffSide Посмотреть сообщение

ребят, а эта прога вообще катируеца, не?
работает
значит нормально
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
06.11.2010, 00:41  [ТС]     Два разных элемента #31
Цитата Сообщение от OffSide Посмотреть сообщение
ну например что означают 2 и 3 строчки и что они означают?
ты так и не объяснил эти вопросы))

Добавлено через 4 часа 28 минут
#define n 2
#define m 5


что это означает??? введение массива?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.11.2010, 00:53     Два разных элемента #32
OffSide,
C
1
#define n 5
При употреблении n - оно заменяется компилятором на 5.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.11.2010, 13:28     Два разных элемента #33
Цитата Сообщение от OffSide Посмотреть сообщение
ты так и не объяснил эти вопросы))

Добавлено через 4 часа 28 минут
#define n 2
#define m 5


что это означает??? введение массива?
это значит n=5, и это значение не изменяется (равносильно const int n=5)(аналогично и для второй)
можно озганизовать динамическое выделение памяти
Mr.X
Эксперт С++
 Аватар для Mr.X
2799 / 1575 / 246
Регистрация: 03.05.2010
Сообщений: 3,656
06.11.2010, 15:24     Два разных элемента #34
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
//////////////////////////////////////////////////////////////////////////////////////
//Дан целочисленный двумерный массив А размера n*m. Известно, что среди его элементов 
//два и только два равны между собой. Напечатать их индексы. 
//////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
//////////////////////////////////////////////////////////////////////////////////////
const int  ROWS_TOTAL = 4; 
const int  COLS_TOTAL = 5;
//////////////////////////////////////////////////////////////////////////////////////
const int arr[ROWS_TOTAL][COLS_TOTAL] = {
                                            {1,   2,     3,   4,   5 },
                                            {6,   1000,  7,   8,   9 },
                                            {10,  11,    12,  13,  14},
                                            {15,  16,  1000,  17,  18}
                                        };
//////////////////////////////////////////////////////////////////////////////////////
void  print_arr(const int arr[][COLS_TOTAL])
{
    for(int i = 0; i < ROWS_TOTAL; ++i)
    {
        for(int j = 0; j < COLS_TOTAL; ++j)
        {
            std::cout << '\t' 
                      << arr[i][j];                   
        }
        std::cout << std::endl
                  << std::endl;
    }
}
//////////////////////////////////////////////////////////////////////////////////////
void  print_equal_elements_pair(const int* const p)
{ 
    const int SIZE_TOTAL = ROWS_TOTAL * COLS_TOTAL;
    for(int k = 0; k < SIZE_TOTAL; ++k)
    {
        for(int n = k + 1; n < SIZE_TOTAL; ++n)
        {
            if(p[k] == p[n])
            {
                std::cout << "arr["
                          << k / COLS_TOTAL
                          << "]["
                          << k % COLS_TOTAL
                          << "] == "
 
                          << "arr["
                          << n / COLS_TOTAL
                          << "]["
                          << n % COLS_TOTAL
                          << "] == "
                          << p[k]; 
                return;
            }
        }    
    }
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Исходный массив:"
              << std::endl;
 
    print_arr(arr);
    std::cout << std::endl
              << "Парные элементы в массиве:"
              << std::endl;
 
    print_equal_elements_pair(arr[0]);
    std::cout << std::endl;
}
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
06.11.2010, 16:16  [ТС]     Два разных элемента #35
Цитата Сообщение от go Посмотреть сообщение
а что рассказывать?
все очень просто
берем первый элемент в массиве (для этого первых два цикла)
затем сравниваем его со всеми следующими элементами
затем берем следующий и сравниваем его также
если нашли нужный - выводим
я не усложнял программу, и она будет делать много ненужных действий после находки элемента
можно оптимизировать
какая строчка не понятна?!
Цитата Сообщение от go Посмотреть сообщение
Добавлено через 17 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#define n 2
#define m 5
 
int main ()
 
{ int i,j,a,b,c;
   int mt[n][m]={{1,2,3,4,5},
                       {1,6,7,8,9}};
 
for (i=0; i<n;i++)
for (j=0;j<m;j++)
{if (j+1!=m) {b=j+1;c=i;} else {b=0;c=i+1;}
for (a=c;a<n;a++){if (b!=j+1) {b=0;}
while(b<m){
if (mt[i][j]==mt[a][b])
{printf ("mt[%d][%d]=%d", i,j,mt[i][j]);
 printf ("\nmt[%d][%d]=%d", a,b,mt[a][b]);
}b++;}}}
 
 
return 0;
}
Исправил кое-какую неточностьhttp://codepad.org/j1YYh6eo

вообщем прога рабит, все норм, объяснил, но завалила на :

C
1
2
{if (j+1!=m) {b=j+1;c=i;} else {b=0;c=i+1;}
for (a=c;a<n;a++){if (b!=j+1) {b=0;}
не смог объяснить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2010, 16:38     Два разных элемента
Еще ссылки по теме:

Последовательность целых чисел. Найти два минимальных / два максимальных элемента C++
C++ Разнести данные и методы в два разных класса
C++ Как вывести два массива разных сортировок?

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.11.2010, 16:38     Два разных элемента #36
Цитата Сообщение от OffSide Посмотреть сообщение
вообщем прога рабит, все норм, объяснил, но завалила на :

C
1
2
{if (j+1!=m) {b=j+1;c=i;} else {b=0;c=i+1;} \* проверка, чтобы выюраный жлемент для сравнения не быд последним в строке*\
for (a=c;a<n;a++){if (b!=j+1) {b=0;}
\\выбираем жлемент в строке для сравнения

не смог объяснить
проверяем чтобы мы не вышли за пределы строки, следующий элемент(который после выбранного для поиска равного ему) находится не за пределами строки? да выбираем следующий элемент,иначе переходим на новую строку и берем с нее первый элемент
второй иф для того, чтобы когда мы первый раз зашли строку то начали с начала, иначе со следующего элемента

объяснить сложно, на примере попрубою

1,2,3,4,5
6,7,8,5,9

если мы остановимся на элементе 5, то следующий мы должны взять во-второй строке т.е. 6
а если на 6, то следующий уже в этой строке , т.е. просто j+1
Yandex
Объявления
06.11.2010, 16:38     Два разных элемента
Ответ Создать тему
Опции темы

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