Есть такая задача:
"В плацкартном вагоне 54 места, которые расположены в девяти купе. Места от 1 до 36 основные и они расположены по четыре в купе (1 - 4 в первом, ..., 33 - 36 в девятом), от 37 до 54 - боковые, разбиты по два, но расположение по купе обратное: места 37, 38 находятся в девятом купе, 39 и 40 в восьмом, ..., 53 и 54 в первом. По номеру места определите номер купе."
Я решил ее так:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
private static int _placesCount;
private static int _roomCount = 18;
private static int _mainRoomPlacesCount = 4;
private static int _sideRoomPlacesCount = 2;
static void Main(string[] args)
{
_placesCount = (_roomCount / 2 * _mainRoomPlacesCount) + (_roomCount / 2 * _sideRoomPlacesCount);
while(true)
{
var number = 0;
Console.WriteLine("\n\nВведите номер места:");
var ParceResult = int.TryParse(Console.ReadLine(), out number);
if (ParceResult)
{
if(number <= _placesCount && number > 0)
{
var result = FindRoomByPlace(number);
Console.WriteLine("Вывод: " + result);
}
else
{
Console.WriteLine("Такого места не существует!");
}
}
else
{
Console.WriteLine("Ошибка. Не удалось преобразовать строку в число.");
}
}
}
private static double FindRoomByPlace(int placeNumber)
{
var mainPlacesCount = _roomCount / 2 * _mainRoomPlacesCount;
if(placeNumber <= mainPlacesCount)
{
return Math.Ceiling((double)placeNumber / _mainRoomPlacesCount);
}
else
{
return Math.Ceiling((double)(_placesCount - placeNumber + 0.5f) / _sideRoomPlacesCount);
}
}
}
}
Есть ли какой-то более зачетный вариант?