Задача Каттиса: Строительство пирамид – почему это неправильно?C#

Место общения программистов C#
Ответить
Anonymous
 Задача Каттиса: Строительство пирамид – почему это неправильно?

Сообщение Anonymous »

Я пытаюсь решить эту проблему здесь, на C#:
https://open.kattis.com/submissions/8340306 (редактировать: полный вопрос ниже)
Итак, вкратце: Дайте количество кирпичей. Цель — выяснить, какой высоты я смогу построить 3D-пирамиду из этих блоков. На верхнем уровне 1 кирпич, на 2-м уровне из верхних 9 кирпичей, на 3-м 25 кирпичей и так далее.
Я думал, что решил, и на данном примере это правильно. Это также верно во всех расчетах, которые я сделал. Тем не менее: из 5 выборок исключено только 3.

Редактировать – полный вопрос: При инициировании над более крупным проектом, например
постройкой пирамиды, лучше подумать дважды. Ваша задача сегодня —
написать программу, которая вычисляет, какой высоты можно построить пирамиду из
определенного количества каменных блоков.
Мы предполагаем, что пирамида должен быть построен компактно, т.е. внутри нет полостей. Более того, мы предполагаем, что он построен по
принципу, показанному на рисунке 1. Каждый слой имеет квадратную форму, длина стороны которого
в два меньше, чем у нижнего слоя. Верхний слой всегда состоит из
одиночного блока.
Изображение

Хорошо, если у вас останутся оставшиеся блоки, если вы построите
полную пирамиду.
Ввод Первая и единственная строка входных данных содержит целое число N
(1≤N≤100000000), количество доступных блоков.
Выходные данные Выведите одно целое число — максимальную высоту пирамиды, которуюможет быть построен как минимум из N блоков.
Изображение


Результат моего решения:
Изображение

Вот мой код - пожалуйста, будьте осторожны, я только учусь :)
public static void Main()
{
int bloecke = int.Parse(Console.ReadLine());
int neueBloecke = 1; // Bloecke, die für die neue Ebene benötigt werden
int sumBloecke = 1; // Blöcke in Summe
int seitenLaenge = 1; // Seitenlänge der Ebene
int ebene = 1; // Auf welcher Ebene wir uns aktuell befinden

while (sumBloecke < bloecke)
{
// Wenn wir weniger als 10 Blöcke haben, brauchen wir gar nicht anzufangen > wir haben 1 Ebene
if (bloecke < 10)
{
ebene = 1;
break;
}

// Andernfalls legen wir los
seitenLaenge += 2;
neueBloecke = seitenLaenge * seitenLaenge;
sumBloecke += neueBloecke;

if (sumBloecke>=bloecke)
{
break;
} else
{
ebene++;
}

}

Console.Write(ebene);

}


Подробнее здесь: https://stackoverflow.com/questions/708 ... ot-correct
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»