Задача Парад планет

Правила проведения олимпиады, условия задач и комментарии к ним, результаты олимпиады и апелляции.
Руководители: к.ф-м.н, профессор Пирогов В.Ю,, к.п.н, доцент Слинкин Д.А,

Модераторы: xdsl, Vladislav_133

Задача Парад планет

Сообщение Vladislav_133 15 мар 2017, 10:43

Разбор задачи "Парад планет" здесь
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: Задача Парад планет

Сообщение Vladislav_133 25 мар 2017, 16:00

Задачка, в сущности, очень проста.
Смотрите, пусть время полного оборота для первой планеты t1, для второй t2.
Следующая встреча для первой планет произойдет через n оборотов, для второй через m.
Полное время для первой планеты тогда будет n*t1, для второй m*t2.
Но это же одно и тоже время, т.е. n*t1=m*t2. Вот в общем то и все.
Как решать такие уравнения вы, естественно, знаете. Вот фрагмент кода:

Подсветка синтаксиса: [ Загрузить ] [ Скрыть ]
Подсветка синтаксиса языка cpp
while(1){
        m=0;
        while(1){
            if(n*t1==m*t2&&n!=0){
                p=1; break;
            }      
            m++;
            if(m*t2>n*t1)break;
        }
        if(p==1)break;
        n++;
}
printf("%u %u %u\n",n,m,n*t1);
 
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: Задача Парад планет

Сообщение [DD] 14 апр 2017, 09:30

По своей сути задача сводится к нахождению НОК'а.
Подсветка синтаксиса: (main.rs) [ Загрузить ] [ Скрыть ]
Подсветка синтаксиса языка php
  1. use std::fs::File;
  2. use std::io::{Write, Read};
  3.  
  4. fn main() {
  5.     let mut input = File::open("input.txt").unwrap();
  6.     let mut output = File::create("output.txt").unwrap();
  7.     let mut data = String::new();
  8.     input.read_to_string(&mut data).unwrap();
  9.     let mut data:Vec<&str> = data.split("\n").filter_map(|x|{let x = x.trim(); if x.len() == 0 {None} else {Some(x)}}).collect();
  10.     let mut data:Vec<u32> = data.remove(0).split(" ").map(|x|{let x = x.trim(); x.parse().unwrap()}).collect();
  11.     let first = data.remove(0);
  12.     let second = data.remove(0);
  13.     let min = std::cmp::min(first, second);
  14.     let max = std::cmp::max(first, second);
  15.     let mut time = max;
  16.     let mut i = 2;
  17.     loop {
  18.         if time % min == 0{
  19.             output.write(&format!("{} {} {}", time / first, time / second, time).into_bytes()).unwrap();
  20.             break;
  21.         }
  22.         else{
  23.             time = max * i;
  24.             i += 1;
  25.         }
  26.     }
  27. }
  28.  

PS: На этом с задачами Владислава Юрьевича вроде окончено. Дальше попробую порешать задачки от Дмитрия Анатольевича.
мы рождены чтоб сказку сделать кодом
[DD]
Elite
 
Сообщения: 163
Зарегистрирован: 18 мар 2009, 22:18
Откуда: from HELL
Полное имя: Зыков Д.А.


Вернуться в Олимпиада по программированию

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron