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
Мобильная версия