Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]найти X,Y,Z при X*Y=Z 
:(
    Опции темы
CppDevelopeR
Дата 21.3.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: -1
Всего: 9



Дана последовательность из N натуральных чисел. Требуется в этой последовательности найти три числа X, Y, Z (не обязательно различных — см. примеры), что X*Y=Z.
Входные данные:
Сначала вводится число N (1≤N≤100) — количество элементов последовательности. Далее идет N натуральных чисел, каждое из которых не превышает 10000.
Выходные данные:
Выведите три искомых числа (сначала X, потом Y, потом Z). Если таких чисел нет, выведите три раза (через пробел) число 0. Если вариантов ответа несколько, выведите любой из них.



--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
CppDevelopeR
Дата 21.3.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: -1
Всего: 9



Кстати, эти три числа не обязательно должны находиться рядом


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
CppDevelopeR
Дата 21.3.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: -1
Всего: 9



Ну помогите пожалуйста!


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
Christoph
Дата 21.3.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 2
Всего: 11



Ну могу помочь с идей, берёшь заполняешь массив....из 100 значений верно?
берёшь 1 значение умножаешь на 2 второй, записываешь в переменную значение....затем сравниваешь это значение со всеми ячейками массива(сравнивать можно все члены массива, так они не будет равны произведению).....если находит...запоминаешь...
дальше берёшь 1 значение и умножаешь на 3 , и выполняешь ту же самую процедуру....
потом берёшь 2 значение и умножаешь на 3......и выполняешь тоже самое smile

P/s Млин ты же С++ девелопер  smile 


--------------------
user posted image
PM MAIL ICQ   Вверх
Rififi
Дата 21.3.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 4
Всего: 36



алгоритм простой, как удар лопатой - крутишь тройной цикл и ищешь все совпадения.
если с boost'ом, то получается так:

Код

#include <vector>
#include <iostream>

#include <boost/bind.hpp>
#include <boost/lambda/lambda.hpp>

/*
Дана последовательность из N натуральных чисел.
Требуется в этой последовательности найти три числа X, Y, Z (не обязательно различных — см. примеры), что X*Y=Z.
**/

typedef std::vector<int> V;

template<
    typename _InIt,
    typename _Pred1,
    typename _Fn1>
inline
_Fn1 for_each_if(_InIt _First, _InIt _Last, _Pred1 _Pred, _Fn1 _Func)
{
    for (; _First != _Last; ++_First)
        if (_Pred(*_First))
            _Func(*_First);
    return (_Func);
}

void find_xyz(const V& v)
{
    struct Out
    {
        typedef void result_type;
        void operator() (int x, int y, int z)
        { std::cout << x << "*" << y << "=" << z << std::endl; }
    };

    // тупо выводим все возможные комбинации X,Y,Z
    // на повторы не обращаем внимания
    namespace lm = boost::lambda;
    for(V::const_iterator x = v.begin(); x != v.end(); ++x)
    for(V::const_iterator y = v.begin(); y != v.end(); ++y)
        for_each_if(v.begin(), v.end(),    
        lm::_1 == *x * *y,
        boost::bind(Out(), *x, *y, _1));
}

#include <boost/assign.hpp>
using namespace boost::assign;

int main()
{
    V v;
    v += 1,2,3,4,5;

    find_xyz(v);
    return (0);
}


вывод:
1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
2*1=2
2*2=4
3*1=3
4*1=4
5*1=5
PM MAIL   Вверх
CppDevelopeR
Дата 21.3.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: -1
Всего: 9



Rififi, а этот код на Visual C++ будет работать?

Добавлено через 1 минуту и 25 секунд
Ваще не понял, нефига не компилируется. Ошибку выдает. Это не ВС 2008!


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
Rififi
Дата 21.3.2008, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 4
Всего: 36



CppDevelopeR, 
для компиляции необходимо выполнение двух условий
1. www.boost.org
2. VC 2005 и выше

ps. boost использовать не обязательно. оно здесть чтобы поменьше  писанины.
PM MAIL   Вверх
ama_kid
Дата 21.3.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 16
Всего: 95



CppDevelopeR, на тебе без буста текст (можно использовать как вариант):
Код

#include <conio.h>
#include <iostream.h>

typedef unsigned char BOOL;
#define MAX_VAL 10000
#define TRUE -1
#define FALSE 0

void main()
{
     unsigned int Num = 0;
     int i,j,k;
     BOOL Val[MAX_VAL];
     unsigned int Tmp = 0;
     clrscr();
     cout<<"Input Num = ";
     cin>>Num;
     for (i=0;i<MAX_VAL;i++) Val[i]=FALSE;

     for (i=0;i<Num;i++)
     {
      cout<<"Input Number["<<i+1<<"] = ";
      cin>>Tmp;
      if ((Tmp>0)&&(Tmp<MAX_VAL)) Val[Tmp-1] = TRUE;
     }
     for (i=0;i<MAX_VAL;i++)
      for (j=0;j<MAX_VAL;j++)
       {
    if ((Val[i]==FALSE)||Val[j]==FALSE) continue;
    for (k=(i>j?i:j);k<MAX_VAL;k++)
     if ((Val[k]==TRUE)&&((i+1)*(j+1)==(k+1)))
      {
       cout<<"\n("<<i+1<<","<<j+1<<","<<k+1<<")";
      }
       }
     getch();
}


Это сообщение отредактировал(а) ama_kid - 21.3.2008, 21:14


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
CppDevelopeR
Дата 21.3.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: -1
Всего: 9



ama_kid,  спасибо за неработающий код. Ввожу нормально. Но почему ничего не выводит!


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
CppDevelopeR
Дата 21.3.2008, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: -1
Всего: 9



ЗЫ. Я работаю на компиляторе Visual Studio 2008! Желательно чтобы код на нем работал

Добавлено через 1 минуту и 19 секунд
Так же по возможности можно и в g++

Добавлено через 12 минут и 10 секунд
Ну так что?


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
ama_kid
Дата 21.3.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 16
Всего: 95



Цитата(CppDevelopeR @  21.3.2008,  22:02 Найти цитируемый пост)
Ввожу нормально. Но почему ничего не выводит!
Я забыл про часть условия
Цитата(CppDevelopeR @  21.3.2008,  16:37 Найти цитируемый пост)
Если таких чисел нет, выведите три раза (через пробел) число 0
можешь сам доделать...
Какие данные вводишь? для примера...
Цитата(CppDevelopeR @  21.3.2008,  22:18 Найти цитируемый пост)
Я работаю на компиляторе Visual Studio 2008! Желательно чтобы код на нем работал
Я писал на DOS-ском С++ - на 2008-м палюбому должен пойти...


Это сообщение отредактировал(а) ama_kid - 21.3.2008, 22:32


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
CppDevelopeR
Дата 21.3.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: -1
Всего: 9



Так что, из-за того что я не учел нули, ниче не выводится. Я не такой олух, и такого по моему не может быть!

Добавлено через 37 секунд
ну ввожу, 2 *переход на след. строку* 1, 2

Добавлено через 1 минуту и 57 секунд
Да вообще, че не введу, ниче не выводит!


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
ama_kid
Дата 21.3.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 16
Всего: 95



ничего не выводится - потому что я не прописал этого в коде, о чем тебе и сообщил... Дай данные для проверки...

Добавлено через 4 минуты и 5 секунд
Цитата(CppDevelopeR @  21.3.2008,  22:36 Найти цитируемый пост)
ну ввожу, 2 *переход на след. строку* 1, 2

У меня выводит:
Цитата
Input Num = 2
Input Number[1] = 1
Input Number[2] = 2

(1,1,1)
(1,2,2)
(2,1,2)



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
CppDevelopeR
Дата 21.3.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: -1
Всего: 9



ну например введи: 2(кол-во), 1,2. Должно вывести - 2.


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
ama_kid
Дата 21.3.2008, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 16
Всего: 95



давай еще тестовых данных


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.