Задача: Посылка. Можно ли коробку размером [latex]a \times b \times c[/latex] упаковать в посылку размером [latex]r \times s \times t[/latex] ? «Углом» укладывать нельзя.
Тесты:
a | b | c | r | s | t | result |
1 | 1 | 1 | 3 | 3 | 3 | Package is fitting to the box |
23 | 2 | 4 | 54 | 45 | 22 | Package is fitting to the box |
0 | 0 | 0 | 1 | 1 | 0 | Package cannot fit ! |
109 | 122 | 222 | 11 | 22 | 33 | Package cannot fit ! |
13 | 43 | 21 | 55 | 76 | 89 | Package is fitting to the box |
23 | 15 | 17 | 44 | 81 | 92 | Package is fitting to the box |
Исходный код программы:
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 |
#include <stdio.h> #include <math.h> int main(void) { // Объявление переменных a,b,c,r,s,t типа float для хранения входных данных float a = 0; float b = 0; float c = 0; float r = 0; float s = 0; float t = 0; // Ввод пользователем значений переменных a, b, c, r, s, t с помощью scanf scanf("%f",&a); scanf("%f",&b); scanf("%f",&c); scanf("%f",&r); scanf("%f",&s); scanf("%f",&t); // Сравниваем рёбра пакета с каждым ребром коробки if ( ( a<r && b<s && c<t ) || ( a<r && c<s && b<t ) || ( b<r && a<s && c<t ) || ( b<r && c<s && a<t ) || ( c<r && a<s && b<t ) || ( c<r && b<s && a<t ) ) { printf("====== The package is fitting ======"); } else { printf("~~~~~~ The package cannot fit ! ~~~~~~ "); } // Завершение программы return 0; } |
Код программы на языке 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 50 51 52 53 54 55 |
import java.util.*; import java.lang.*; import java.io.*; class BoxApp { public static Float scanFloat( Scanner in ) { return ( ( in.hasNextFloat() ) ? in.nextFloat() : null ); } public static void main( String[] args ) { // ќбъ¤вление переменных a,b,c,r,s,t типа float дл¤ хранени¤ входных данных float a = 0; float b = 0; float c = 0; float r = 0; float s = 0; float t = 0; // ¬вод пользователем значений переменных a, b, c, r, s, t с помощью scanf Scanner in = new Scanner(System.in); a = scanFloat( in ); b = scanFloat( in ); c = scanFloat( in ); r = scanFloat( in ); s = scanFloat( in ); t = scanFloat( in ); in.close(); // —равниваем рЄбра пакета с каждым ребром коробки if ( ( a<r && b<s && c<t ) || ( a<r && c<s && b<t ) || ( b<r && a<s && c<t ) || ( b<r && c<s && a<t ) || ( c<r && a<s && b<t ) || ( c<r && b<s && a<t ) ) { System.out.printf("====== The package is fitting ======"); } else { System.out.printf("~~~~~~ The package cannot fit ! ~~~~~~ "); } } } |
Ссылка http://ideone.com/cRnZc7
Программа состоит из следующих частей:
- Объявление переменных a,b,c,r,s,t типа float для хранения входных данных
- Ввод пользователем значений переменных a, b, c, r, s, t с помощью scanf
- Вывод исходных данных
- Сравниваем рёбра пакета с каждым ребром коробки
- Завершение программы
Программа сверяет размеры коробки ( package ) с размерами посылки ( box ). Если размеры коробки меньше, чем посылки, программа сообщает о возможности упаковки коробки в посылку. В противном случае выводиться сообщение о невозможности упаковки коробки данных размеров в посылку.
Ссылка на ideone.com : http://ideone.com/XYcV5W
— Зачем нужна функция код вызова которой, длиннее кода самой функции?
— Зачем нужна функция, которая вызывается только один раз?
— Вы несколько раз пишите про объём, но вычисления объёма не проводите. Это и не нужно.
— Вы пишите колоссально длинный текст, напоминающий акростих. Второе мне нравится, а первое не очень.
— Но самое ужасное — Вы из-за этой декорации забыли решить задачу. Просто не учли, что коробку можно размещать тремя способами.
P.S. Мы запускаем программу в пакетном режиме в IDEone входные данные читаются из stdin. Кому Вы адресуете все эти диалоги? Они очень аккуратные, но выводятся все разом в выходной поток перед результатом и только запутывают дело. Порадуйте меня, напишите решение в 5 строк 🙂
Если не хотите радовать, сойдет и так, только учтите все способы «ровной, не под углом» укладки коробки в посылку.
Замечания отработаны:
1)Функцию убрал, заменил на логическое выражение под if
2)Логическое выражение учитывает повороты, проверяет все рёбра, ( см. комментарии к if )
3) Убрал все лишние printf
Отлично!
Конечно не 5 строк, но всё очень легко читается. У Вас откуда-то стиль оформления кода из 90-х годов. Этот стиль был очень наглядным и понятным. Мне это нравится.
Но есть проблема. Условие записано неверно. Теперь программа не проходит Ваши собственные тесты.
Кстати тесты нужны были, чтобы их запускать. Нужно было проверить. Уже второй должен дать ошибочный ответ.
Если можно, вставьте в конце ссылку на Ваш код в ideone
Да! Замените, пожалуйста, в условии звёздочки крестиком. Пусть будет как в задачнике. В laTeX это символ \times
Понял, уже исправил.
Вы меня неправильно поняли.
У Вас не тест неправильный, а программа. Поставьте тест как было, пожалуйста.
Ваше условие утверждает, что коробку можно упаковать в ящик только если все ее размеры меньше всех размеров ящика. Это не так.
Посмотрим второй тест: (23 < 54) и (2 < 45) и (4 < 22). Так почему "too big"? Явно поместится.
Это победа! Зачтено
Засчитана Java версия.