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

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

Войти
Регистрация
Восстановить пароль
 
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 674
#1

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

16.06.2014, 17:12. Просмотров 352. Ответов 10
Метки нет (Все метки)

Всем привет. Мне дана такая задача с массивом.
Дан массив. Вывести на экран индексы 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;
Как мне нужно переделать циклы? Заранее спасибо.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2014, 17:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задачка с одномерным массивом. Отбор по условию (C++):

Задачка с одномерным массивом.Найти количество удвоенных нечётных чисел - C++
Помогите пожалуйста. Вот текст задания: Даны целые числа a1,a2..an.Известно что a1&gt;0 и что среди a2..an есть хотя бы одно...

Задачка с одномерным массивом. Определить количество одноразрядных, двухразрядных и трёхразрядных чисел в процентном отношении - C++
Имеется задача: Создать массив из 50 случайных чисел в диапазоне от 0 до 200. Определить количество одноразрядных, двухразрядных и...

Задача с одномерным массивом - C++
1)Сформировать одномерный массив целых чисел используя датчик случайных чисел. 2)Распечатать полученный массив 3)Удалить 5 первых...

Работа с одномерным целочисленным массивом в функции - C++
Здравствуйте. Я написал несколько функций по работе с массивом. В dimentInt() я объявляю массив и передаю его в addNewElIDA, которая...

Затруднения с одномерным массивом( максимальное значение) - C++
Здравствуйте! Нужно составить программу, которая вводит 10 целых элементов одномерного массива, находит максимальных элемент и выводит...

Программа работы с одномерным динамическим массивом - C++
Помогите пожалуйста!!! //Реализовать функционал работы с одномерным динамическим массивом. // 1. Создание массива // 2. Заполниние...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
16.06.2014, 17:14 #2
Пфф... ==
1
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];
2
Jewbacabra
Эксперт PHP
2472 / 2060 / 779
Регистрация: 24.04.2014
Сообщений: 6,068
16.06.2014, 17:18 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
if(a[i] = a[j] + a[k]){
C++
1
a[i] == a[j] + a[k]
1
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 674
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].
Не подскажете, что я делаю не так? Вроде все верно же. Задачка то простая.
0
lsprofit
58 / 58 / 15
Регистрация: 12.02.2014
Сообщений: 108
16.06.2014, 18:06 #6
Размер массива должен быть не 100, а 1001.
C++
1
int a[1001];
1
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 674
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 Посмотреть сообщение
"Неправильный ответ"
0
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;
                }
            }
        }
    }
1
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 674
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].
0
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)
1
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 674
16.06.2014, 18:29  [ТС] #11
lsprofit, Сейчас попробую.

Добавлено через 3 минуты
lsprofit, Спасибо огромное вам. Недоглядел условие.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2014, 18:29
Привет! Вот еще темы с ответами:

Нуждаюсь в исправлении программы , с одномерным массивом - C++
Задан массив, содержащий N элементов. Упорядочить его элементы с четными индексами в порядке возрастания, а элементы с нечетными индексами...

Функции для работы с одномерным динамическим массивом - C++
Написать функции для работы с одномерным динамическим массивом: 1. Заполнение массива случайными значениями. 2. Вывод элементов массива...

Создать класс для роботы с одномерным массивом - C++
Создать класс для роботы с одномерным массивом целых чисел. В ней должны быть поля int IntArray int n Должен быть который...

Заполнить двухмерный массив одномерным массивом по столбцам - C++
Заполнить двухмерный массив одномерным массивом по столбцам. Пример Дан одномерный массив: Надо заполнить новый двухмерный...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.06.2014, 18:29
Ответ Создать тему
Опции темы

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