Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Задача с использованием массива


Автор: kristel 27.10.2006, 11:34
Нужна помощь в решении задачи:

Дано натуральное число n и целые числа а1,а2,   ....an    ( n<100  ) . Определить есть ли среди этих чисел такие,которые равны сумме двух других. Распечатать эти числа в форме ak=ai+aj.

Автор: Dov 27.10.2006, 13:13
Так что ли?

Код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main()
{
    srand((unsigned)time(NULL));

    const int n = 10;                                        
    int arr[n];

    for(int i = 0; i < n; i++)
    {
        arr[i] = rand() % 100 + 1;                         
        cout << arr[i] << " ";    
    }    

    cout << endl << endl;
    for(int k = 0; k < n; k++)
        for(int i = 0; i < n - 1; i++)
            for(int j = i + 1; j < n; j++)
                if(arr[k] == arr[i] + arr[j])
                    cout << arr[k] << " = " << arr[i] << " + " << arr[j] << endl;

    return 0;
}

Автор: Oleg_Ci 27.10.2006, 15:21
Цитата
Так что ли?
неправильно... smile 
Твоя программа мне вон что выдала:
34 = 32 + 2
34 = 32 + 2
34 = 32 + 2
71 = 60 + 11
... дальше правильно
Т.е. она у тебя одинаковые результаты выдаёт, если это правильно то нормально значит.

У меня во какая заморочка, и повторов нету  smile  
Код

#include <iostream>
#include <ctime>
using std::cout;

int main()
{
    srand((unsigned)time(NULL));
    const int size = 20; // 0< size <100
    int array[size];
    int res[3][100]; // результаты
    int len = 0; // количесто результатов
    bool flag = true;
    for ( int i=0; i<size; i++ ){
        array[i] = rand()%9 +1; // скадывать числа от 1 до 9
        cout << array[i] << " ";
    }

    cout << "\n\nResultat:\n";
    for( int i=0; i<size; i++ )
        for( int j=0; j<size; j++ )
            for( int x=0; x<size; x++ )
                if( array[i] == array[j] + array[x] && i!=j && x!=j && i!=x )
                {
                    flag = true;
                    if( len )
                        for( int a=0; a<len; a++ )
                        {
                            if(( array[j] == res[1][a] && array[x] == res[2][a] )||
                                ( array[j] == res[2][a] && array[x] == res[1][a] )) flag = false;
                        }
                        if(flag){
                            res[0][len] = array[i];
                            res[1][len] = array[j];
                            res[2][len] = array[x];
                            len++;
                            cout << array[i] << " = " << array[j] << " + " << array[x] << std::endl;
                        }                                    
                }

    puts("\n\n\nPress the key of enter for the program exit");
    getchar();
    return 0;
}

Автор: Dov 27.10.2006, 17:37
Цитата(kristel @ 27.10.2006,  11:34)
Нужна помощь в решении задачи:

Дано натуральное число n и целые числа а1,а2,   ....an    ( n<100  ) . Определить есть ли среди этих чисел такие,которые равны сумме двух других. Распечатать эти числа в форме ak=ai+aj.


Гы, Олег4,  я здеся про повторы ничего не увидел  smile 

Автор: Oleg_Ci 27.10.2006, 18:44
Dov, в своей программе исправь это
Код

arr[i] = rand() % 100 + 1; 
на это
Код

arr[i] = rand() % 10; 
столько оветов вылезет что в консоль не влезет...



Цитата(Dov @  27.10.2006,  21:37 Найти цитируемый пост)
Гы, Олег4,  я здеся про повторы ничего не увидел
Ну значит ты нормально написал smile 

Автор: Dov 27.10.2006, 18:56
Цитата(Олег4 @  27.10.2006,  18:44 Найти цитируемый пост)
столько оветов вылезет что в консоль не влезет...


Олег4, так я ж проверял перед тем, как постил, поэтому 100 + 1 и написал.   smile  smile  smile 

Автор: kristel 27.10.2006, 20:45
Bolshoje prebolshojo vam spasibo, vi menja tak viru4ili! :

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)