web_Developer_Victor
@web_Developer_Victor
Что такое google?

Проблема в тестах или в коде?

Привет! Есть 2 одинаковые (или почти) программы на Python и Java.

Если коротко что он делает:
Есть робот, которому нужно разрезать торт на N (2 <= N <= 100) равных частей. Первый разрез проводится от центра к
K (0.00 <= K <= 359.99) градусов (торт идеальный круг). Нужно вывести где будет находиться последний разрез.
Вводиться два числа N, K через пробел.
Вывод одно число: ответ с 1 числом после точки.

Пример:
Ввод: 2 300.00 Вывод: 120.0
Ввод: 100 0.01 Вывод: 356.4

Python

from math import floor

count, start = input().split()
count, start = float(count), float(start)

onePiece = 360 / count
lastPiece = abs(start + ((count - 1) * onePiece))

if lastPiece > 360:
  lastPiece = lastPiece - (floor(lastPiece / 360) * 360)

print(f"{lastPiece:.1f}")


Java

import java.util.Scanner;
import java.text.DecimalFormat;

public class MyClass {
    public static void main(String args[]) {
      Scanner scanner = new Scanner(System.in);
      String s = scanner.nextLine();
      
      String[] tokens = s.split(" ");
      Double count = Double.valueOf(tokens[0]);
      Double start = Double.valueOf(tokens[1]);

      Double onePiece = 360 / count;
      Double lastPiece = Math.abs(start + ((count - 1) * onePiece));

      if (lastPiece > 360) {
        lastPiece = lastPiece - (Math.floor(lastPiece / 360) * 360);
      }
      
      String res = new DecimalFormat("#0.0").format(lastPiece);
      
      System.out.println(res);
    }
}



2 программы одинаковый (сначала написал на Python, потом пришлось переписать на Java). При тестах на Python мне показали Run-time error 1 test, но на Java все тесты прошли успешно.
Подскажите, пожалуйста, проблема в программе или же тесты отличались?
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 2
@o5a
Правильнее использовать %
def last_cut(N, K):
    circle = 360
    part = circle/N
    result = (part*(N-1)+K)%circle
    return result
Ответ написан
Комментировать
@Andy_U
А почему у вас переменная count в обоих вариантах не 'int'?
Зачем нужен abs при вычислении 'lastPiece'?
Нафига ручками вычислять модуль в питоне, если есть оператор '%' ?

Еще возможно, что ответ 360.0, возвращаемый вашим кодом, например, при входной строке "2 180.0", может интерпретироваться, как неверный - должно печататься 0.0?

Т.е. все проще, чем вы нагородили (хотя и в вашем коде я источника RuntimeError не вижу):

if __name__ == '__main__':
    count, start = input('input count and start: ').split()
    count, start = int(count), float(start)
    last_piece = (start + (count - 1) * 360 / count) % 360
    print(f"{last_piece:.1f}")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы