Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 108
1

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

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

Author24 — интернет-сервис помощи студентам
Дан целочисленный двумерный массив А размера n*m. Известно, что среди его элементов два и только два равны между собой. Напечатать их индексы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2010, 16:25
Ответы с готовыми решениями:

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

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

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

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

35
3 / 3 / 1
Регистрация: 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
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 108
01.11.2010, 17:30  [ТС] 3
если, честно, то что -то не понятно ничего)
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
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
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 108
01.11.2010, 20:33  [ТС] 5
препод за goto покарает меня)) нужно вместо goto писать printf и выводить найденные индексы, как сделать хз
0
246 / 178 / 47
Регистрация: 14.06.2010
Сообщений: 422
01.11.2010, 21:41 6
M128K145, всегда выводится i = 0 j = 0
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
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
3 / 3 / 1
Регистрация: 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
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 108
01.11.2010, 23:20  [ТС] 9
все так сложно, мы пишем на BorlandC, а прогу на С++ мне написали, я чета ступил, что нужно поменять?
0
246 / 178 / 47
Регистрация: 14.06.2010
Сообщений: 422
01.11.2010, 23:55 10
M128K145, что то я не вижу в данном массиве ни одной пары одинаковых элементов
Не понимаю что это за значения :
i = 5 j = 5
k = 9 l = 9
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
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
57 / 57 / 5
Регистрация: 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
3 / 3 / 1
Регистрация: 31.10.2010
Сообщений: 13
02.11.2010, 09:39 13
M128K145, согласен, в читаемости проигрывает

Но до сих пор помню что начинается у преподавателя , когда он видит goto
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
02.11.2010, 16:56 14
Тогда этот вариант
Цитата Сообщение от M128K145 Посмотреть сообщение
ваш преподаватель на самом деле программирования не знает
Добавлено через 5 часов 53 минуты
aferook, кстати, посмотрите эту тему Замена goto на адекватный оператор
0
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 108
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
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
04.11.2010, 19:42 16
сейчас напишу тебе для борланд
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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(...)
    {
    }
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
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
1
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 108
04.11.2010, 20:37  [ТС] 19
можно вкратце принцип работы? я изучаю этот язык всего 2 месяца.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
04.11.2010, 21:18 20
Цитата Сообщение от OffSide Посмотреть сообщение
можно вкратце принцип работы? я изучаю этот язык всего 2 месяца.
а что рассказывать?
все очень просто
берем первый элемент в массиве (для этого первых два цикла)
затем сравниваем его со всеми следующими элементами
затем берем следующий и сравниваем его также
если нашли нужный - выводим
я не усложнял программу, и она будет делать много ненужных действий после находки элемента
можно оптимизировать
какая строчка не понятна?!
0
04.11.2010, 21:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2010, 21:18
Помогаю со студенческими работами здесь

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

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

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

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


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

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