SOROMIR
1

Задача про гномов

20.01.2013, 02:07. Показов 1910. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста разобраться с задачей->


На скамье длиной L см расположены N гномов. В момент времени 0 гномы начинают двигаться по заданных направлениях со скоростью 1 см в секунду. При столкновении гномы мгновенно разворачиваются и начинают двигаться в противоположных направлениях с той же скоростью. При достижении края скамьи гном падает. Определите через сколько секунд упадёт последний гном.

Входные данные:
1-я строка: N L
N = (1..105), L = (2..106)
2-я строка: N разных чисел - расстояние в сантиметрах от левого края до соответствующего гнома (0..L);
3-я строка: N чисел - направление движения (-1 - влево; 1 - вправо) .
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2013, 02:07
Ответы с готовыми решениями:

Задачка про Гномов и Злого волшебника Грендальфа
Добрый день. Задали такую головоломку решить на Прологе: ЗАДАЧА №10. Пользуясь методом...

Тема про гномов, эльфов и орков. Ролевики и толкиенисты, кучкуемся!
Девять - струны звонкой лютни, той, что носят менестрели, что воспели в своих песнях девять...

задача про100 гномов
Разработайте программу для решения следующей задачи: «Сто гномов едят одно яблоко весом в 200...

Задача про взлом кода из книги Эрика Фримена про основы javascript в конце 5 главы.
читаю книгу Эрика Фримена про основы javascript.В конце 5 главы есть задачка про взлом кода.Никак...

1
3 / 3 / 1
Регистрация: 27.07.2012
Сообщений: 37
21.01.2013, 16:59 2
Лучший ответ Сообщение было отмечено как решение

Решение

Скажу сразу мне было немного лень делать все проверки от дурака. Думаю можно сделать еще экономичнее и мне бы хотелось взглянуть на такой вариант решения.
PHP
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
56
57
58
59
60
61
62
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Задача про гномов</title>
</head>
 
<body>
<?php
$FirstForm='<form method="post"><table>
    <tr><td>Введите число гномов (n)</td><td><input type="text" name="n"></td></tr>
    <tr><td>Введите длинну строки (l)</td><td><input type="text" name="l"></td></tr>
    </table><input type="submit" name="submit1"></form> ';
if(isset($_POST['submit1'])||isset($_POST['submit2'])){
    if($_POST['n']<=$_POST['l']&&$_POST['l']>1&&$_POST['n']>1&&is_numeric($_POST['n'])&&is_numeric($_POST['l'])){
        $SecondForm='<form method="post"><table><tr><td>Номер гнома</td><td>Позиция</td><td>направление движения</td></tr>';
        for( $i=1; $i<=$_POST['n']; $i++)
            $SecondForm.="<tr><td>$i</td><td><input type=\"text\" name=\"g[$i]\"></td><td><label><input type='radio' name='ar[$i]' value='-1' checked>Влево</label>&nbsp&nbsp&nbsp<label>Вправо<input type='radio' name='ar[$i]' value='1'></label></td></tr>";
        $SecondForm.='</table><input type="hidden" name="n" value="'.$_POST['n'].'"><input type="hidden" name="l" value="'.$_POST['l'].'">
            <input type="submit" name="submit2"></form>';
        if(isset($_POST['submit2'])){
            //здесь можно сделать еще одну проверку что все позиции числовые, но мне влом. Сделаю потом. Может получиться экономнее.
            $i=0;
            $ar=$_POST['ar'];//для удобства
            $g=$_POST['g'];//для удобства
            while(!empty($g)){
                $i++;
                foreach($g as $k=>&$v){
                    if($i==1&&!is_numeric($v)){ //проверка на вверденные числовые значения. Мне все еще влом проверять заня ли гномы одинаковые позиции
                        echo "<h1>Не верные данные</h1>";
                        break(2);
                    }
                    if(!in_array($v+$ar[$k], $g))
                        $v+=$ar[$k];//смещение позиции в нужную сторону
                    elseif(!in_array($v-$ar[$k], $g)){
                        $ar[$k]*=-1;//изменение направления
                        $v+=$ar[$k];
                    }
                    //заключительного else нету. не двигаемся. с двух сторон все занято
                    if($v>=$_POST['l']||$v<0){
                        unset($g[$k]);//удаляем элементы масивов
                        unset($ar[$k]);// не обязательная строка
                    }
                }
            }
            echo "Последний гном свалится на $i секунде";
        }
        else
            echo $SecondForm;
    }
    else{
        echo '<h1>Введены не верные данные</h1>';
        echo $FirstForm;
    }
}
else{
    echo $FirstForm;
}
 
?>
</body>
</html>
Добавлено через 4 минуты
была мысль сделать с помощью битовой строки, тогда можно избавиться от одного из двух масивов. Но лень
0
21.01.2013, 16:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2013, 16:59
Помогаю со студенческими работами здесь

Задача на перебор вариантов. Задача Л.Эйлера. Про чиновника
Задача Л.Эйлера. Некий чиновник купил лошадей и быков на сумму 1770 талеров. За каждую лошадь он...

Белоснежка и n гномов
У Белоснежки n гномов, и все они очень разные. Она знает, что для того, чтобы уложить спать i-го...

Задача про IP
Простите что не совсем в тему , но у меня ответ 97.15.81.53/15 , но говорят это неправильно ...

Задача про последовательность
Всем привет!:) В лабораторной есть задача такая: Из множества всех последовательностей длины n,...

задача про шары
в коробке лежат 5 белых и 9 черных шаров, шары извлекают до появлению черного шара какова...

Задача про теплоход
Теплоход проходит за P1 по течению и R1 часа против течения S км. Он же за R2 ч против течения...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru