forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   На входе имеем 4-е переменные, на выходе 2-е. (http://forum.boolean.name/showthread.php?t=17852)

CRASHER 08.02.2013 20:11

На входе имеем 4-е переменные, на выходе 2-е.
 
К примеру есть переменные a,b,c,d. Я их проверяю по какому то принцыпу и у меня остается всегда 2-е каких то, либо a и d, либо c и b и.т.д. Как мне записать их в переменные x и y по умному, обычными условиями надоело пользоваться да и не кошерно вроде.

CRASHER 08.02.2013 22:24

Ответ: На входе имеем 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 либо ни одного?

HolyDel 08.02.2013 23:30

Ответ: На входе имеем 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;


CRASHER 09.02.2013 00:27

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

HolyDel 09.02.2013 01:06

Ответ: На входе имеем 4-е переменные, на выходе 2-е.
 
что у тебя должно быть в x, y? приведи более подробный пример. все еще не понятно.

CRASHER 09.02.2013 16:58

Ответ: На входе имеем 4-е переменные, на выходе 2-е.
 
я выбрал из a,b,c,d к примеру c,d. Как по умному присвоить их x,y? С учетом того что могут быть и a,d и b,c?

AVL 09.02.2013 18:04

Ответ: На входе имеем 4-е переменные, на выходе 2-е.
 
Загнать a, b, c, d в массив и выбрать 2 индекса.

Platon 09.02.2013 19:26

Ответ: На входе имеем 4-е переменные, на выходе 2-е.
 
CRASHER
Такое ощущение что ты сам не понимаешь что хочешь :) Обьсни-же уже саму задачу, а не то, как ты ее пытаешься решить.
ЗЫ
переменные a,b,c,d это булевы результаты InLine?
x, y должны содержать координаты передаваемые в InLine?
а если нет, то какой смысл присваивать к ним конкретные две переменных из "a,b,c,d", если они все булевы?
или же тебе надо чтобы x, y идентифицировали эту пару переменных?
кто здесь?:)

MiXaeL 09.02.2013 22:59

Ответ: На входе имеем 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 кладутся переменные, ничего сказано не было.

CRASHER 10.02.2013 01:52

Ответ: На входе имеем 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 пере запишется два раза, как такого избежать, вот что я хочу узнать. Надеюсь хоть чуть смог пояснить...

HolyDel 10.02.2013 01:58

Ответ: На входе имеем 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 уже говорил

CRASHER 10.02.2013 03:14

Ответ: На входе имеем 4-е переменные, на выходе 2-е.
 
HolyDel, честно я понял что ответ AVL'а это уже близко, но все же твой ответ понятнее))


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot