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

Задачка с одномерным массивом. Отбор по условию - C++

Восстановить пароль Регистрация
 
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
16.06.2014, 17:12     Задачка с одномерным массивом. Отбор по условию #1
Всем привет. Мне дана такая задача с массивом.
Дан массив. Вывести на экран индексы i, j, k, при которых a[i] = a[j] + a[k]. То есть, если дан массив
1 2 3 5 7
то должно вывести либо 3 2 1, либо 2 1 1, либо 4 2 3, либо 5 2 4. Можно вывести любой вариант. Индексы могут быть в диапазоне 1<= i,j,k <= n. Вот я попробовал написать программу.
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
#include <iostream>
#include <conio.h>
using namespace std;
 
int a[100];
 
int main()
{
    int n;
    int i,j,k;
 
    cin >> n;
 
    for(i = 1;i <= n;i++)
        cin >> a[i];
 
    for(j = 1;j <= n;j++)
        a[j] == a[i];
 
    for(k = 1;k <= n;k++)
        a[k] == a[i];
 
    for(i = 1;i <= n;i++){
        for(j = 1;j <= n;j++){
            for(k = 1;k <= n;k++){
                if(a[i] = a[j] + a[k]){
                    cout << i << " " << j << " " << k;
                    getch();
                    return 0;
                }
            }
        }
    }
    cout << "-1" << endl;
 
    getch();
 
    return 0;
}
Все время выводит 1 1 1. Смотрел отладчиком. Проблема в этом куске.
C++
1
2
3
4
5
6
7
    for(i = 1;i <= n;i++){
        for(j = 1;j <= n;j++){
            for(k = 1;k <= n;k++){
                if(a[i] = a[j] + a[k]){
                    cout << i << " " << j << " " << k;
                    getch();
                    return 0;
Как мне нужно переделать циклы? Заранее спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2014, 17:12     Задачка с одномерным массивом. Отбор по условию
Посмотрите здесь:

Задачка с одномерным массивом.Найти количество удвоенных нечётных чисел C++
C++ Работа с одномерным массивом.
задача с одномерным массивом C++
Проблемы с одномерным массивом C++
Задачка с одномерным массивом. Определить количество одноразрядных, двухразрядных и трёхразрядных чисел в процентном отношении C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
16.06.2014, 17:14     Задачка с одномерным массивом. Отбор по условию #2
Пфф... ==
lsprofit
58 / 58 / 15
Регистрация: 12.02.2014
Сообщений: 108
16.06.2014, 17:16     Задачка с одномерным массивом. Отбор по условию #3
И ещё в этих строках нет смысла.
C++
1
2
3
4
5
    for(j = 1;j <= n;j++)
        a[j] == a[i];
 
    for(k = 1;k <= n;k++)
        a[k] == a[i];
Jewbacabra
1795 / 1510 / 543
Регистрация: 24.04.2014
Сообщений: 4,252
16.06.2014, 17:18     Задачка с одномерным массивом. Отбор по условию #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
if(a[i] = a[j] + a[k]){
C++
1
a[i] == a[j] + a[k]
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
16.06.2014, 17:47  [ТС]     Задачка с одномерным массивом. Отбор по условию #5
Kuzia domovenok, Переделал так.
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
#include <iostream>
using namespace std;
 
int a[100];
 
int main()
{
    int n;
    int i,j,k;
 
    cin >> n;
 
    for(i = 1;i <= n;i++)
        cin >> a[i];
 
    for(j = 1;j <= n;j++)
        a[j] = a[i];
 
    for(k = 1;k <= n;k++)
        a[k] = a[i];
 
    for(i = 1;i <= n;i++){
        for(j = 1;j <= n;j++){
            for(k = 1;k <= n;k++){
                if(a[i] = a[j] + a[k]){
                    cout << i << " " << j << " " << k;
                    return 0;
                }
            }
        }
    }
    cout << "-1" << endl;
 
    return 0;
}
Все время выводит -1.

Добавлено через 45 секунд
Jewbacabra, Сейчас попробую

Добавлено через 27 минут
В общем, спасибо вам. Программа работает. Несколько раз проверял. Все верно вроде. Но система выдает "Неправильный ответ". Уточню. Я не занимаюсь спортивным программированием. У нас в универе таким образом все сдают задачи.
Вот условие задачи:
Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 100) — количество видов червей. На следующей строке через пробел записано n целых чисел a[i] (1 ≤ a[i] ≤ 1000) — длины червей всех видов.

Выходные данные

Выведите 3 различных целых числа i j k (1 ≤ i, j, k ≤ n) — номера видов червей, для которых выполняется a[i] = a[j]+ a[k]. Если таких не существует, выведите -1. Если решений несколько, выведите любое. Допустимо, что a[j] = a[k].
Не подскажете, что я делаю не так? Вроде все верно же. Задачка то простая.
lsprofit
58 / 58 / 15
Регистрация: 12.02.2014
Сообщений: 108
16.06.2014, 18:06     Задачка с одномерным массивом. Отбор по условию #6
Размер массива должен быть не 100, а 1001.
C++
1
int a[1001];
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
16.06.2014, 18:17  [ТС]     Задачка с одномерным массивом. Отбор по условию #7
lsprofit, Почему?
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
В первой строке записано целое число n (3 ≤ n ≤ 100) — количество видов червей.
Это сами числа в массиве в диапазоне
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
(1 ≤ a[i] ≤ 1000)
Попробовал сделать с вектором.
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>
#include <vector>
using namespace std;
 
int main()
{
    int n;
    int i,j,k;
 
    cin >> n;
    vector<int>a(100);
 
    for(i = 1;i <= n;i++)
        cin >> a[i];
 
 
    for(i = 1;i <= n;i++){
        for(j = 1;j <= n;j++){
            for(k = 1;k <= n;k++){
                if(a[i] == a[j] + a[k]){
                    cout << i << " " << j << " " << k;
                    return 0;
                }
            }
        }
    }
    cout << "-1" << endl;
 
    return 0;
}
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
"Неправильный ответ"
lsprofit
58 / 58 / 15
Регистрация: 12.02.2014
Сообщений: 108
16.06.2014, 18:20     Задачка с одномерным массивом. Отбор по условию #8
Да, но тогда не до 100, а до 101. Так как нумерация у вас с 1, а не с 0.
Выведите 3 различных целых числа (!!!!)
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
  for(i = 1;i <= n;i++){
        for(j = 1;j <= n;j++){
            for(k = 1;k <= n;k++){
                if(a[i] == a[j] + a[k] && i!=j && j!=k && i!=k){
                    cout << i << " " << j << " " << k;
                    return 0;
                }
            }
        }
    }
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
16.06.2014, 18:24  [ТС]     Задачка с одномерным массивом. Отбор по условию #9
lsprofit,
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>
#include <vector>
using namespace std;
 
int main()
{
    int n;
    int i,j,k;
 
    cin >> n;
    vector<int>a(101);
 
    for(i = 1;i <= n;i++)
        cin >> a[i];
 
 
    for(i = 1;i <= n;i++){
        for(j = 1;j <= n;j++){
            for(k = 1;k <= n;k++){
                if(a[i] == a[j] + a[k]){
                    cout << i << " " << j << " " << k;
                    return 0;
                }
            }
        }
    }
    cout << "-1" << endl;
 
    return 0;
}
Переделал.
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
"Неправильный ответ"


Добавлено через 1 минуту
lsprofit,
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Допустимо, что a[j] = a[k].
lsprofit
58 / 58 / 15
Регистрация: 12.02.2014
Сообщений: 108
16.06.2014, 18:24     Задачка с одномерным массивом. Отбор по условию #10
В условии сказано о трех различных числах.
C++
1
   if(a[i] == a[j] + a[k] && i!=j && j!=k && i!=k)
Выведите 3 различных целых числа i j k (1 ≤ i, j, k ≤ n)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2014, 18:29     Задачка с одномерным массивом. Отбор по условию
Еще ссылки по теме:

Программа с одномерным массивом C++
Задание с одномерным массивом C++
C++ Работа с одномерным массивом

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

Или воспользуйтесь поиском по форуму:
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
16.06.2014, 18:29  [ТС]     Задачка с одномерным массивом. Отбор по условию #11
lsprofit, Сейчас попробую.

Добавлено через 3 минуты
lsprofit, Спасибо огромное вам. Недоглядел условие.
Yandex
Объявления
16.06.2014, 18:29     Задачка с одномерным массивом. Отбор по условию
Ответ Создать тему
Опции темы

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