С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
#1

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

01.11.2010, 16:25. Просмотров 1416. Ответов 35
Метки нет (Все метки)

Дан целочисленный двумерный массив А размера n*m. Известно, что среди его элементов два и только два равны между собой. Напечатать их индексы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2010, 16:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Два разных элемента (C++):

Последовательность целых чисел. Найти два минимальных / два максимальных элемента - C++
Дана последовательность целых чисел a1,a2,...,an, где n=> 3. Найти: а) два максимальных элемента последовательности; б) два минимальных...

Вставить два элемента после мах элемента и перед ним - C++
Составить программу решения задачи на С++, использовать процедуры введения и вывода массивов, выделить в задаче вспомогательные алгоритмы и...

Вставить два элемента по 1000, начиная с четвертого элемента исходного массива, сдвигая его элементы - C++
Помогите с созданием программы, которая выполняет следующие действия: a) одномерный массив из 10 элементов целого типа в диапазоне ; b)...

Два разных operator[] - C++
Зачем нужны в классе два перегруженых оператора operator и почему первый без const? Ето пример из книги Прата class Student { ...

Найти два таких два таких элемента, разность модулей которых имеет максимальное значение - C++
в целочисленном массиве найти два таких два таких элемента,разность модулей котооых имеет максимальное значение, и удалить из их состава...

После каждого четного элемента массива вставить два элемента с тем же значением, после чего полученный массив отсортировать по убыванию - C++
Ребят, помогите с задачкой новичку. После каждого четного элемента массива вставить два элемента с тем же значением, после чего...

35
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);
            }
0
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
01.11.2010, 17:30  [ТС] #3
если, честно, то что -то не понятно ничего)
0
M128K145
Эксперт С++
8300 / 3520 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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:;
0
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
01.11.2010, 20:33  [ТС] #5
препод за goto покарает меня)) нужно вместо goto писать printf и выводить найденные индексы, как сделать хз
0
TheMachinist
244 / 176 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.11.2010, 21:41 #6
M128K145, всегда выводится i = 0 j = 0
0
M128K145
Эксперт С++
8300 / 3520 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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:;
есть еще другие действия и этот код находится не в отдельной функции, то тогда я признаю свою ошибку, сейчас же вы показываете, что ваш преподаватель на самом деле программирования не знает
1
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;
                    }
0
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
01.11.2010, 23:20  [ТС] #9
все так сложно, мы пишем на BorlandC, а прогу на С++ мне написали, я чета ступил, что нужно поменять?
0
TheMachinist
244 / 176 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.11.2010, 23:55 #10
M128K145, что то я не вижу в данном массиве ни одной пары одинаковых элементов
Не понимаю что это за значения :
i = 5 j = 5
k = 9 l = 9
0
M128K145
Эксперт С++
8300 / 3520 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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;
}
1
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;
}
1
aferook
3 / 3 / 0
Регистрация: 31.10.2010
Сообщений: 13
02.11.2010, 09:39 #13
M128K145, согласен, в читаемости проигрывает

Но до сих пор помню что начинается у преподавателя , когда он видит goto
0
M128K145
Эксперт С++
8300 / 3520 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
02.11.2010, 16:56 #14
Тогда этот вариант
Цитата Сообщение от M128K145 Посмотреть сообщение
ваш преподаватель на самом деле программирования не знает
Добавлено через 5 часов 53 минуты
aferook, кстати, посмотрите эту тему Замена goto на адекватный оператор
0
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??
1
04.11.2010, 15:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2010, 15:36
Привет! Вот еще темы с ответами:

Два разных массива записать последовательно в третий - C++
Пожалуйста помогите! Ввод-два массива разной длинны.Записать в третий-сначала идут элементы первого затем второго массива. Зарание...

Как записать два разных класса в массив? - C++
допустим есть vector&lt;class_a&gt; cont_a; vector&lt;class_b&gt; cont_b; // тут мы их заполнили допустим по 800 элементов в каждом векторе.и...

Разнести данные и методы в два разных класса - C++
Товарищи скорректируйте в какую сторону двигаться. Есть задача создать библиотеку из двух классов. Один содержит поля с характеристиками...

Как вывести два массива разных сортировок? - C++
Необходимо сделать одну программу , где нужно вывести сначала неотсортированный массив, затем один массив отсортированный вставками, и один...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.