Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9

Если только одно значение

01.05.2013, 15:37. Показов 927. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, господа!
Есть задание, которое звучит вот так
"вернуть true, если только одно из чисел А, В и С меньше 50"
не то чтобы тут возник вопрос о реализации, скорей наоборот заинтересовали мысли о том, каким наименьшим количеством кода это реально реализовать. Тут три переменных, а вот как "красиво" выполнить задание с 100 переменными к примеру, если только одно должно быть меньше 50. Циклический перебор с использованием темповых переменных не интересует, интересует именно логическая запись, как покороче это реализовать можно. Пример за 100 переменных не учитываем, как можно оперировать этими тремя, чтобы не "говнокодить".

Спасибо за любые мысли!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.05.2013, 15:37
Ответы с готовыми решениями:

Даны действительные числа X, Y. Если X, Y. – отрицательны, то каждое значение заменить его модулем;если отрицательно только одно из них, то оба значен
Даны действительные числа X, Y. Если X, Y. – отрицательны, то каждое значение заменить его модулем;если отрицательно только одно из них, то...

Не используя if присвоить переменной значение 0, если из трех чисел только одно положительное
Не могу разобраться как это правильно расписать Не используя оператор if, присвоить переменной k значение 0, если из веденных чисел...

Даны действительные числа x, y. Если x и y отрицательные, то х присвоить значение удвоенного модуля х. Если положительно одно из них, то увеличить у в
Даны действительные числа x, y. Если x и y отрицательные, то х присвоить значение удвоенного модуля х. Если положительно одно из них, то...

6
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
01.05.2013, 16:11
Цитата Сообщение от tankomaz Посмотреть сообщение
чтобы не "говнокодить"
я на java пока по-другому и не умею, но как вариант:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class OnlyOneLess {
    private static boolean onlyOneLessThanFirst(int ... params) {
        if ( params.length < 2 )
            throw ( new IllegalArgumentException("At least 2 elements needed!") );
        int numberToCompare = params[0];
        int lessCount = 0;
        for ( int i = 1; i < params.length; ++i )
            if ( params[i] < numberToCompare )
                if ( ++lessCount > 1 )
                    return false;
        return ( lessCount == 1 );
    }
    
    public static void main(String[] args) {
        System.out.println(onlyOneLessThanFirst(50, 60, 70, 80));
        System.out.println(onlyOneLessThanFirst(50, 40, 60, 70, 80));
        System.out.println(onlyOneLessThanFirst(50, 30, 40, 60, 70, 80));
    }
}
1
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
01.05.2013, 16:20  [ТС]
за решение спасибо, немножко не так значит вопрос поставил. Мне именно логическая запись интересна вида

((a < 50) && (b > 50) && (c > 50)) || ((a > 50) && (b < 50) && (c > 50)) || ((a > 50) && (b > 50) && (c < 50)), вот это сократить реально? предположим что по другому ну никак нельзя, как сделать это условие короче используя логические операции
я знаю вы знаете )
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
01.05.2013, 16:28
Цитата Сообщение от tankomaz Посмотреть сообщение
используя логические операции
Java
1
2
3
4
5
6
7
8
9
10
11
class Less50 {
    private static boolean less50(int a, int b, int c) {
        return ( a < 50 ) ^ ( b < 50 ) ^ ( c < 50 );
    }
    
    public static void main(String[] args) {
        System.out.println(less50(40, 50, 60));
        System.out.println(less50(50, 60, 70));
        System.out.println(less50(30, 40, 50));
    }
}
1
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
01.05.2013, 16:33  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
10
11
class Less50 {
    private static boolean less50(int a, int b, int c) {
        return ( a < 50 ) ^ ( b < 50 ) ^ ( c < 50 );
    }
    
    public static void main(String[] args) {
        System.out.println(less50(40, 50, 60));
        System.out.println(less50(50, 60, 70));
        System.out.println(less50(30, 40, 50));
    }
}
Оооо!! я про XOR и забыл совсем, благодарю!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
01.05.2013, 21:39
tankomaz, одна беда - работает неправильно, если три числа меньше 50

Добавлено через 2 часа 19 минут
Вот так отработало:
Java
1
2
3
4
    private static boolean less50(int _a, int _b, int _c) {
        boolean a = ( _a < 50 ), b = ( _b < 50 ), c = ( _c < 50 );
        return ( ! ( a & b || a & c || b & c ) && a | b | c );
    }
но всё равно корявенько как-то, надо ещё подумать...

Добавлено через 45 минут
Ещё вариант
Java
1
return ( a ^ b  ) ? !c : ( a ) ? false : c;
Добавлено через 1 час 55 минут
Последний вариант можно завернуть в рекурсию для произвольного количества значений
Java
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
40
41
42
43
44
45
46
47
48
49
import java.util.Stack;
 
class OneLessChecker {
    private int valueToCompare;
    
    private boolean testFunc(Stack<Boolean> stk) {
        if ( stk.empty() )
            return false;
        else if ( stk.size() == 1 )
            return stk.pop();
        else {
            boolean a = stk.pop();
            boolean b = stk.pop();
            return ( a ^ b ) ? !testFunc(stk) : ( a ) ? false : testFunc(stk);
        }
    }
    
    public OneLessChecker(int _v) {
        valueToCompare = _v;
    }
    
    public boolean testValues(int ... values) {
        if ( values.length == 0 )
            return false;
        
        Stack<Boolean> stk = new Stack<>();
        for ( int i : values )
            stk.push( i < valueToCompare );
        
        return testFunc(stk);
    }
}
 
class OneLessCheckerTest {
    public static void main(String[] args) {
        OneLessChecker chk = new OneLessChecker(50);
        
        // true
        System.out.println(chk.testValues(40, 50, 60));
        System.out.println(chk.testValues(80, 40, 50, 60));
        System.out.println(chk.testValues(98, 90, 40, 50, 60));
        System.out.println(chk.testValues(100, 98, 80, 40, 50, 60));
        // false
        System.out.println(chk.testValues(22, 100, 98, 80, 40, 50, 60));
        System.out.println(chk.testValues(100, 98, 0, 80, 40, 50, 60));
        System.out.println(chk.testValues(100, 98, 80, 80, 50, 60));
        System.out.println(chk.testValues(100, 98, 80, 40, 50, 60, 0));
    }
}
2
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
01.05.2013, 23:17
вот от меня
Java
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
/**
 *
 * @author mutagen
 */
public class LessFifty {
 
    public static final int FIFTY = 50;
 
    public static void main(String[] args) {
 
        p(lessFiftyOnce());
        p(lessFiftyOnce(40));
        p(lessFiftyOnce(40, 50, 60));
        p(lessFiftyOnce(30, 40, 50, 20));
        p(lessFiftyOnce(98, 90, 40, 50, 60));
        p(lessFiftyOnce(50, 60, 70, 80));
 
    }
 
    static void p(Object o) {
        System.out.println(o);
    }
 
    static boolean lessFiftyOnce(int... in) {
        int counter = 0;
        for (int i : in) {
            if (i < FIFTY) {
                counter++;
                if (counter > 1) {
                    return false;
                }
            }
 
        }
        return counter == 1;
    }
}
У будды правильный путь, но только исключения лишние

Добавлено через 4 минуты
Цитата Сообщение от tankomaz Посмотреть сообщение
используя логические операции
код должен быть максимально читабелен, это главное.
поэтому злоупотреблять префикснымии операциями и каскадной логикой плохо изначально
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.05.2013, 23:17
Помогаю со студенческими работами здесь

матчить только если в строке одно слово
нужно сделать паттерн который будет матчить только если в строке (string) только 1 слово php или css или ahk если же строка &quot;php...

Если отрицательно только одно из чисел, то оба значения увеличить на 0,5
1) Даны действительные числа X, Y. Если X, Y. – отрицательны, то каждое значение заменить его модулем; - если отрицательно только одно...

Вывести только одно значение y и p
что я делаю не так чтобы выводило только одно значение y и p ?????? Помогите пожалуйста! Program num1; Uses crt; Var ...

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

Вывести в цикле только одно значение
Здравствуйте. Переделываю дизайн и застрял на выводе языковых иконок. Вот что имею $lang_go // текущий язык, строка $langs // массив ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru