17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
1

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

16.06.2014, 17:12. Показов 1821. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2014, 17:12
Ответы с готовыми решениями:

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

Задачка с одномерным массивом
помогите, пожалуста решить задачу, своих знаний не хватает. В одномерном массиве целых чисел ...

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

Задачка с массивом и задачка с формулами Ньютона и Лагранжа
Прошу помочь решить две задачи

10
3753 / 3073 / 850
Регистрация: 25.03.2012
Сообщений: 11,367
Записей в блоге: 1
16.06.2014, 17:14 2
Пфф... ==
1
58 / 58 / 22
Регистрация: 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
Эксперт PHP
4811 / 3827 / 1593
Регистрация: 24.04.2014
Сообщений: 11,236
16.06.2014, 17:18 4
Лучший ответ Сообщение было отмечено Sh@dow777 как решение

Решение

Цитата Сообщение от Sh@dow777 Посмотреть сообщение
if(a[i] = a[j] + a[k]){
C++
1
a[i] == a[j] + a[k]
1
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
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
58 / 58 / 22
Регистрация: 12.02.2014
Сообщений: 108
16.06.2014, 18:06 6
Размер массива должен быть не 100, а 1001.
C++
1
int a[1001];
1
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
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
58 / 58 / 22
Регистрация: 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
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
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
58 / 58 / 22
Регистрация: 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
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
16.06.2014, 18:29  [ТС] 11
lsprofit, Сейчас попробую.

Добавлено через 3 минуты
lsprofit, Спасибо огромное вам. Недоглядел условие.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2014, 18:29
Помогаю со студенческими работами здесь

Задача с одномерным массивом
Как решить эту задачу?) Условие задачи: Составить графическую схему алгоритма и написать...

Работа с одномерным массивом
Паскаль. Задан одноименный массив X, содержащий N элементов Определить: А) Сумму всех...

Программа с одномерным массивом
Сформировать в программе массив из целых чисел от 2 до N. Подсчитать сумму квадpатов четных и...

Задание с одномерным массивом
Нужна помощь с решением задания. Даны вещественные числа x, a,...,a (n=12). Выяснить, во-первых,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru