Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aferook
3 / 3 / 0
Регистрация: 31.10.2010
Сообщений: 13
01.11.2010, 16:34     Два разных элемента #2
Я думаю как-то так:

C++
1
2
3
4
5
6
7
    
for (int i=0;i<SizeArray-1;i++)
        for (int j=i+1;j<SizeArray;j++)
            if (array[i]==array[j]){
                printf ("%d - %d",i,j);
                return(0);
            }
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
01.11.2010, 17:30  [ТС]     Два разных элемента #3
если, честно, то что -то не понятно ничего)
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
01.11.2010, 17:45     Два разных элемента #4
aferook,
Цитата Сообщение от OffSide Посмотреть сообщение
Дан целочисленный двумерный массив
Массив есть
Цитата Сообщение от aferook Посмотреть сообщение
C++
1
if (array[i]==array[j])
А где двумерный массив?

Вот решение в лоб
C++
1
2
3
4
5
6
7
8
9
10
for(i = 0; i < arraySize; ++i)
    for(j = 0; j < arraySize; ++j)
        for(k = 0; k < arraySize; ++k) 
            for(l = 0; l < arraySize; ++l)
                if(i != k && j != l && array[i][j] == array[k][l])
                {
                    std::cout<<"i = "<<i<<"\tj = "<<j<<std::endl;
                    goto end;
                }
end:;
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
01.11.2010, 20:33  [ТС]     Два разных элемента #5
препод за goto покарает меня)) нужно вместо goto писать printf и выводить найденные индексы, как сделать хз
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.11.2010, 21:41     Два разных элемента #6
M128K145, всегда выводится i = 0 j = 0
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
01.11.2010, 22:58     Два разных элемента #7
NikolaWhite, уверены? Код проверен в еклипсе
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
#include <iostream>
 
int main() {
    int i, j, k, l, arraySize, z = 0;
    std::cout<<"Input size:\n> ";
    std::cin>>arraySize;
    int **array = new int*[arraySize];
    for(i = 0; i < arraySize; ++i)
        array[i] = new int[arraySize];
 
    for(i = 0; i < arraySize; ++i)
        for(j = 0; j < arraySize; ++j)
            array[i][j] = z++;
 
    array[arraySize>>1][arraySize>>1] = array[arraySize-1][arraySize-1];
 
    for(i = 0; i < arraySize; ++i)
        for(j = 0; j < arraySize; ++j)
            for(k = 0; k < arraySize; ++k)
                for(l = 0; l < arraySize; ++l)
                    if(i != k && j != l && array[i][j] == array[k][l])
                    {
                        std::cout<<"i = "<<i<<"\tj = "<<j<<
                                   "\nk = "<<k<<"\tl = "<<l<<std::endl;
                        goto end;
                    }
    end:;
    return 0;
}
Результат:
Код
Input size:
> 10
i = 5	j = 5
k = 9	l = 9


Цитата Сообщение от OffSide Посмотреть сообщение
препод за goto покарает меня)) нужно вместо goto писать printf и выводить найденные индексы, как сделать хз
Если ваш препод предложит мне более легкий, красивый и удобный выход из этого цикла, при условии, что после
C++
1
    end:;
есть еще другие действия и этот код находится не в отдельной функции, то тогда я признаю свою ошибку, сейчас же вы показываете, что ваш преподаватель на самом деле программирования не знает
aferook
3 / 3 / 0
Регистрация: 31.10.2010
Сообщений: 13
01.11.2010, 23:17     Два разных элемента #8
А где двумерный массив?
Действительно... Двумерный

А выход из цикла можно оформить так:

C++
1
2
3
4
5
6
7
8
9
10
11
bool stop=false;
for(i = 0; (i < arraySize)&& (!stop); ++i)
        for(j = 0; (j < arraySize)&& (!stop); ++j)
            for(k = 0; (k < arraySize)&& (!stop); ++k)
                for(l = 0; (l < arraySize)&& (!stop); ++l)
                    if(i != k && j != l && array[i][j] == array[k][l])
                    {
                        std::cout<<"i = "<<i<<"\tj = "<<j<<
                                   "\nk = "<<k<<"\tl = "<<l<<std::endl;
                        stop=true;
                    }
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
01.11.2010, 23:20  [ТС]     Два разных элемента #9
все так сложно, мы пишем на BorlandC, а прогу на С++ мне написали, я чета ступил, что нужно поменять?
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.11.2010, 23:55     Два разных элемента #10
M128K145, что то я не вижу в данном массиве ни одной пары одинаковых элементов
Не понимаю что это за значения :
i = 5 j = 5
k = 9 l = 9
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
02.11.2010, 00:04     Два разных элемента #11
NikolaWhite, в arraySize вводим значение 10, далее в коде есть такая строка
C++
1
array[arraySize>>1][arraySize>>1] = array[arraySize-1][arraySize-1];
Это при том что в матрице у нас все элементы уникальны, мы делаем два одинаковых значения. И не сложно предсказать результат работы программы.
http://codepad.org/gae0QY1m


aferook, вы действительно считаете этот вариант более читабельным, чем вариант с goto?


OffSide, где-то так
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
#include <iostream.h>
 
int main() {
    int i, j, k, l, arraySize, z = 0;
    cout<<"Input size:\n> ";
    cin>>arraySize;
    int **array = new int*[arraySize];
    for(i = 0; i < arraySize; ++i)
        array[i] = new int[arraySize];
 
    for(i = 0; i < arraySize; ++i)
        for(j = 0; j < arraySize; ++j)
            array[i][j] = z++;
 
    array[arraySize>>1][arraySize>>1] = array[arraySize-1][arraySize-1];
 
    for(i = 0; i < arraySize; ++i)
        for(j = 0; j < arraySize; ++j)
            for(k = 0; k < arraySize; ++k)
                for(l = 0; l < arraySize; ++l)
                    if(i != k && j != l && array[i][j] == array[k][l])
                    {
                        cout<<"i = "<<i<<"\tj = "<<j<<
                                   "\nk = "<<k<<"\tl = "<<l<<endl;
                        goto end;
                    }
    end:;
    return 0;
}
KpeHDeJIb
 Аватар для KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
02.11.2010, 00:27     Два разных элемента #12
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
#include <stdio.h>
 
static const unsigned n = 4, m = 4;
static int array[n][m] = {{0,1,2,3}, {4,5,6,2}, {7,8,9,10}, {11,12,13,14}};
static unsigned i1, j1, i2, j2;
 
bool find_indices()
{
    unsigned i, j, size = n * m;
    int value;
 
    for (i = 0; i < size; ++i)
    {
        i1 = i / m;
        j1 = i % m;
 
        value = array[i1][j1];
 
        for (j = size - 1; j > i; --j)
        {
            i2 = j / m;
            j2 = j % m;
 
            if (value != array[i2][j2])
                continue;
 
            return true;
        }
    }
 
    return false;
}
 
int main()
{
    if (find_indices())
        printf("[%u, %u] == [%u, %u]\n", i1, j1, i2, j2);
 
    return 0;
}
aferook
3 / 3 / 0
Регистрация: 31.10.2010
Сообщений: 13
02.11.2010, 09:39     Два разных элемента #13
M128K145, согласен, в читаемости проигрывает

Но до сих пор помню что начинается у преподавателя , когда он видит goto
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
02.11.2010, 16:56     Два разных элемента #14
Тогда этот вариант
Цитата Сообщение от M128K145 Посмотреть сообщение
ваш преподаватель на самом деле программирования не знает
Добавлено через 5 часов 53 минуты
aferook, кстати, посмотрите эту тему Замена goto на адекватный оператор
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
04.11.2010, 15:36  [ТС]     Два разных элемента #15
Цитата Сообщение от KpeHDeJIb Посмотреть сообщение
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
#include <stdio.h>
 
static const unsigned n = 4, m = 4;
static int array[n][m] = {{0,1,2,3}, {4,5,6,2}, {7,8,9,10}, {11,12,13,14}};
static unsigned i1, j1, i2, j2;
 
bool find_indices()
{
    unsigned i, j, size = n * m;
    int value;
 
    for (i = 0; i < size; ++i)
    {
        i1 = i / m;
        j1 = i % m;
 
        value = array[i1][j1];
 
        for (j = size - 1; j > i; --j)
        {
            i2 = j / m;
            j2 = j % m;
 
            if (value != array[i2][j2])
                continue;
 
            return true;
        }
    }
 
    return false;
}
 
int main()
{
    if (find_indices())
        printf("[%u, %u] == [%u, %u]\n", i1, j1, i2, j2);
 
    return 0;
}
можешь написать коментарии к: bool find_indices(),
C++
1
2
3
4
5
6
7
int main()
{
    if (find_indices())
        printf("[%u, %u] == [%u, %u]\n", i1, j1, i2, j2);
 
    return 0;
}
и вообще программа для С++ или BorlandC??
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.11.2010, 19:42     Два разных элемента #16
сейчас напишу тебе для борланд
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.11.2010, 19:48     Два разных элемента #17
M128K145,
читается мб и хуже, но пойдет если взять за правило не использовать goto (не смотря на то, что здесь он впринципе в тему).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    try
    {
        for(i = 0; i < arraySize; ++i)
          for(j = 0; j < arraySize; ++j)
           for(k = 0; k < arraySize; ++k)
            for(l = 0; l < arraySize; ++l)
             if(i != k && j != l && array[i][j] == array[k][l])
             {
                std::cout<<"i = "<<i<<"\tj = "<<j<<
                "\nk = "<<k<<"\tl = "<<l<<std::endl;
                throw 0;
             }
    }
    catch(...)
    {
    }
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.11.2010, 20:21     Два разных элемента #18
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;
   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++)
{b=j+1;
for (a=i;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/JQOWJS0d
и составлена просто и понятно

Добавлено через 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
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
04.11.2010, 20:37  [ТС]     Два разных элемента #19
можно вкратце принцип работы? я изучаю этот язык всего 2 месяца.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2010, 21:18     Два разных элемента
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.11.2010, 21:18     Два разных элемента #20
Цитата Сообщение от OffSide Посмотреть сообщение
можно вкратце принцип работы? я изучаю этот язык всего 2 месяца.
а что рассказывать?
все очень просто
берем первый элемент в массиве (для этого первых два цикла)
затем сравниваем его со всеми следующими элементами
затем берем следующий и сравниваем его также
если нашли нужный - выводим
я не усложнял программу, и она будет делать много ненужных действий после находки элемента
можно оптимизировать
какая строчка не понятна?!
Yandex
Объявления
04.11.2010, 21:18     Два разных элемента
Ответ Создать тему
Опции темы

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