Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 08.02.2013, 20:11   #1
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
На входе имеем 4-е переменные, на выходе 2-е.

К примеру есть переменные a,b,c,d. Я их проверяю по какому то принцыпу и у меня остается всегда 2-е каких то, либо a и d, либо c и b и.т.д. Как мне записать их в переменные x и y по умному, обычными условиями надоело пользоваться да и не кошерно вроде.
(Offline)
 
Ответить с цитированием
Старый 08.02.2013, 22:24   #2
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

chek1=0
chek2=0
chek3=0
chek4=0

if(a) chek1=1
if(b) chek2=1
if(c) chek3=1
if(d) chek4=1

x=?
y=?

Как быстро записать какие то две переменные в x и y если сумма всех chek всегда равна 2 либо ни одного?
(Offline)
 
Ответить с цитированием
Старый 08.02.2013, 23:30   #3
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

не понятно.

что у тебя в переменных, числа? целые?
по какому принципу ты их проверяешь? на равенство нулю, на положительность?

ну например так:
    int a = 45;
    int b = 0;
    int c = 76;
    int d = 0;

    int x = std::max(a,std::max(b,std::max(c,d)));
    int y = (a + b + c + d) - x;


    cout << "Hello world!" << x << " " << y << endl;
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 00:27   #4
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

HolyDel, ты намикаеш на то, что с разным исходным условием действовать нужно по разному?
у меня функция InLine(movs2\P1x,movs2\P1z) возвращает булеан.
Поэтому и подписал chek1 chek2...
Я просто хотел узнать универсальный способ, может он существует, а то 5-ти этажные условия нагромождать не хочется.
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 01:06   #5
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

что у тебя должно быть в x, y? приведи более подробный пример. все еще не понятно.
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 16:58   #6
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

я выбрал из a,b,c,d к примеру c,d. Как по умному присвоить их x,y? С учетом того что могут быть и a,d и b,c?
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 18:04   #7
AVL
Разработчик
 
Регистрация: 27.01.2011
Адрес: Афипский
Сообщений: 419
Написано 100 полезных сообщений
(для 182 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

Загнать a, b, c, d в массив и выбрать 2 индекса.
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 19:26   #8
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

CRASHER
Такое ощущение что ты сам не понимаешь что хочешь Обьсни-же уже саму задачу, а не то, как ты ее пытаешься решить.
ЗЫ
переменные a,b,c,d это булевы результаты InLine?
x, y должны содержать координаты передаваемые в InLine?
а если нет, то какой смысл присваивать к ним конкретные две переменных из "a,b,c,d", если они все булевы?
или же тебе надо чтобы x, y идентифицировали эту пару переменных?
кто здесь?
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 22:59   #9
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

Можешь сделать так, сам разберешься почему это работает) Явное приведение типов на всякий случай написал, для прояснения картины.

int s = (int)check1 * a + (int)check2 * b + (int)check3 * c + (int)check4 * d;
int p = ((int)check1+1)*((int)check2+1)*((int)check3+1)*(( int)check4+1)*a*b*c*d;

В этих двух переменных сумма и учетверенное произведение искомых переменных.
Таким образом:

int x = .5 * (s + sqrt(s^2 - p));
int y = .5 * (s - sqrt(s^2 - p));

Понятно, что можно было и наоборот посчитать, но про порядок, по которому в x и y кладутся переменные, ничего сказано не было.
(Offline)
 
Ответить с цитированием
Старый 10.02.2013, 01:52   #10
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

Чот вы ребят все усложняете, кароч вот как все происходит.

Вот решение которое естесно не работает, но оно короткое и поможет понять о чем я.

if (chek1=1) {x=a}
if (chek2=1) {x=b}
if (chek3=1) {y=c}
if (chek4=1) {y=d}

Это не будет работать потому что может быть так что chek1=0 и chek2=0 а к примеру chek3=1 и chek4=1 и тогда у меня в x не запишется ничего и y пере запишется два раза, как такого избежать, вот что я хочу узнать. Надеюсь хоть чуть смог пояснить...
(Offline)
 
Ответить с цитированием
Старый 10.02.2013, 01:58   #11
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

int temp[2];int i = 0;
if (chek1=1) {temp[i++]=a}
if (chek2=1) {temp[i++]=b}
if (chek3=1) {temp[i++]=c}
if (chek4=1) {temp[i++]=d}
x = temp[0]; y = temp[1];
AVL уже говорил
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
CRASHER (10.02.2013)
Старый 10.02.2013, 03:14   #12
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: На входе имеем 4-е переменные, на выходе 2-е.

HolyDel, честно я понял что ответ AVL'а это уже близко, но все же твой ответ понятнее))
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 04:55.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com