Какой должен быть лог c, чтобы найти минимальный угол наклона часов? - PullRequest
1 голос
/ 23 апреля 2020

Details of taking input and output Мой код ниже, он работал нормально для примера тестового примера, но не был принят в окончательном представлении. Программа просит это сделать. На Земле есть 360 Долгот, которые являются равноудаленными вертикальными воображаемыми линиями, нарисованными на Земле, отделенными друг от друга на 1 градус от центра Земли. Период вращения Земли вокруг своей оси составляет 24 часа. Все страны имеют свое официальное время и, следовательно, часовые пояса.

UT C - это универсальная временная координата, которая проходит через 0 (нулевой градус) долготы.

Время в определенном месте на Земле может рассчитываться с использованием периода вращения Земли и долготы этого конкретного места. Например, индийский часовой пояс IST (стандартное индийское время) расположен на 82,5 ° восточной долготы. Следовательно, индийское время можно рассчитать следующим образом: -

IST = UT C + (24/360) * 82,5 = UT C + 5: 30H

Теперь предположим, что мы изменились Период вращения Земли с использованием некоторой воображаемой силы, это изменит время на каждой долготе на Земле.

Рассчитайте наименьший угол между часовой и минутной стрелками часов, который показывает разницу во времени на определенная долгота и время в UT C, т.е. мы должны взять меньший из двух углов, образованных между часовой и минутной стрелками.

#include <stdio.h>
#include <math.h>
int main()
{
int p;
float l;
float t,m,mang,hang,and;
int i;
scanf("%d",&p);
scanf("%f",&l);
l= floor(100*l)/100; 
t=(p/360.0)*l;
i=(int)t;
m=((t-i)*60);
mang=(m/5)*30;
if(i>=1&&i<=11){
hang=(i*30)+(((t-i)*60)/2);
}
else
hang=0+(((t-i)*60)/2);
if(mang>=hang)
{
ang=mang-hang;
}
else
{
ang=hang-mang;
}
if(((i>6&&i<=11)&&m==0.0)||ang>180.0)
{
 ang=360-ang;
}
printf("%0.2f",ang);
return 0;
}

1 Ответ

0 голосов
/ 23 апреля 2020

Проблема может быть в отсутствии точности.

Например, для ввода p=1 и l=0.01 ваш код печатает 0.05. Просто изменяя тип данных переменных с плавающей на двойную, вывод становится 0.06. Учитывая, что правильный ответ 0.055 в этом случае, вы должны напечатать 0.06.

...