Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2015, 20:31   #1
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Радость Задача про часики)

Помогите, плиз, решить задачу:

В сутках N часов. Имеются часики с циферблатом и стрелочками, но только большая стрелка совершает один оборот за 1 час, а вот большая - за 1 сутки (ну в которых N часов).
Два друга поссорились в a+b/c часов (например в 4+2/3 часа). Дробь b/c правильная и несократимая. И помирятся друзья, когда стрелки часов совпадут
На вход даются, собсна, n, a, b и c. Нужно вывести время, когда друзья помирятся , то есть вывести те a, b, c, если они помирятся в a+b/c.

Напишите, пожалуйста, код, заранее Спасибо!!!
isst вне форума Ответить с цитированием
Старый 04.01.2015, 20:36   #2
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Напишите, пожалуйста, код
На языке жестов пойдёт?
WinCoder вне форума Ответить с цитированием
Старый 04.01.2015, 20:43   #3
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Радость

Цитата:
Сообщение от WinCoder Посмотреть сообщение
На языке жестов пойдёт?
Не-е, не пойдет А можно попросить на Паскале или C++?

Ребят, вы не думайте, я не из тех, кто хочет на халяву. У меня есть наработки по этому вопросу, вот код, только он не на всех тестах срабатывает(((
Код:
function NOD(a, b:LongInt):LongInt;
 
var c:LongInt;
 
begin
  while (b <> 0) do
  begin
    c:= a mod b;
    a:= b;
    b:= c;
  end;
  NOD:= a;
end;

var k, n, a, b, c, i:LongInt;
 
procedure outputresult(x, y, h:LongInt);
 
var alpha, betta, gamma, buf, nodik:LongInt;
 
begin
  alpha:=  x div y;
  buf:= x - y * alpha;
  alpha:= (h+alpha) mod N;
  nodik:= NOD(buf, y);
  betta:= buf div nodik;
  gamma:= y div nodik;
  writeln(alpha, ' ', betta, ' ', gamma);
end;
 

begin
  readln(k);
  for i:= 1 to k do
  begin
    readln(n, a, b, c);
    if b*(N-1) < a*c then outputresult(a, n-1, a) 
    else outputresult(a+1, n-1, a+1);
  end;
end.

Последний раз редактировалось Stilet; 05.01.2015 в 16:02.
isst вне форума Ответить с цитированием
Старый 04.01.2015, 22:22   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

В след. раз начинай с этого
Цитата:
Нужно вывести время, когда друзья помирятся , то есть вывести те a, b, c, если они помирятся в a+b/c.
Бред, не?

Последний раз редактировалось Poma][a; 04.01.2015 в 22:25.
Poma][a вне форума Ответить с цитированием
Старый 04.01.2015, 22:39   #5
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
В след. раз начинай с этого

Бред, не?

Извините, может по-дурацки сформулировал, там нао вывесл время встречи стрелок часов в формате a+b/c, где b/c - несократимя дробь. Ну например 2+ 3/4
isst вне форума Ответить с цитированием
Старый 04.01.2015, 22:42   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Бинго! дошло, спасибо
Poma][a вне форума Ответить с цитированием
Старый 04.01.2015, 22:45   #7
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Бинго! дошло, спасибо
Понял уж... Посмотрите этот код на наличие ошибок?
isst вне форума Ответить с цитированием
Старый 04.01.2015, 22:53   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Сообщение от isst Посмотреть сообщение
Понял уж... Посмотрите этот код на наличие ошибок?
А то.. Ночь-то длинная
Poma][a вне форума Ответить с цитированием
Старый 04.01.2015, 23:09   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

А где ее можно сдать?
Poma][a вне форума Ответить с цитированием
Старый 04.01.2015, 23:51   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Не могу понять одно.. Откуда такой ответ на 2-ой тест?

Дошло.. Это чтобы вывести еще и секунды.. Это все портит..
Вышло вот так..
Набирает всего 7 баллов..
Код:
#include <iostream>

using namespace std;

long long gcd(long long a, long long b)
{
	while (a*b != 0)
		if (a > b)
			a %= b;
		else
			b %= a;
	return a + b;
}


int main()
{
	long long k;
	cin >> k;

	for (long long i = 0; i < k; i++)
	{
		long long n, a, b, c;
		cin >> n >> a >> b >> c;
		double t = (a*c + b)*60.0 / c;

		long long j = (long long) t*(n - 1) / (60 * n);
		long long v = 60 * (j + 1)*n;// / (n - 1);
		a = v / 60 / (n-1) % n;
		b = v/60%(n-1); c = n-1;
		
		long long g = gcd(b, c);
		c /= g; b /= g;		
		cout << a << " " << b << " " << c << endl;
	}

}
Кажется дошло.. Все из-за того, что изначально мы получаем нецелое число.. А как эту ересь ареол плеть я пока не придумал..

Последний раз редактировалось Poma][a; 05.01.2015 в 01:35.
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часики Rost93 JavaScript, Ajax 2 13.11.2011 02:13
Часики TuneK Помощь студентам 0 15.04.2009 20:10
Часики на Ассемблере -=Hellsing-= Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 07.02.2009 11:14
Зацените Часики. Vemer Софт 2 01.02.2009 11:08
Задачка про часики. RealSHELS Паскаль, Turbo Pascal, PascalABC.NET 2 13.09.2008 18:17