我試圖在 C# 中解決這個問題:

如果你有剩余的積木也沒關系,只要你建造一個完整的金字塔。
輸入第一行也是唯一的輸入行包含一個整數 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);
}
uj5u.com熱心網友回復:
看起來你一直在搞砸這個試圖讓它作業。你用沒有真正目的的代碼把它復雜化了,現在它很混亂。
當只需要一個時,您的回圈有 2 個退出條件,您ebene = 1無緣無故地進入其中,等等。
你采取了錯誤的方法。如果你只是弄亂你的代碼,直到它適用于你正在應用的任何測驗,那么你永遠不會真正確信它適用于你沒有測驗的東西。
你需要向自己證明它是正確的。嘗試這樣的事情:
- 確保在回圈的頂部,總塊數、底面積和邊長對于金字塔大小有效
ebene 1。(這稱為回圈不變數) - 如果該金字塔所需的塊總數比您擁有的多,則退出頂部的回圈
- 否則,遞增
ebene并計算下一個大小的變數,然后回圈。
如果您執行這個簡單的程序,那么您將確信結果是正確的。
uj5u.com熱心網友回復:
這對我有用:
public static void Main()
{
int availableBlocks = int.Parse(Console.ReadLine());
int newBlocks = 0; // blocks for the new level
int sumBlocks = 0; // sum of used blocks
int edgeLength = 0; // blocks on one side of the level
int level = 0; // which level are we
while (true)
{
// e.g. availableBlocks = 15
//
// edge | new | sum | ok? | level
// 0 0 0 yes 0
// 1 1 1 yes 1
// 3 9 10 yes 2
// 4 16 26 no -
// edgeLength increases by 2, except for the first top-level
if (edgeLength==0)
{
edgeLength ;
} else
{
edgeLength = 2;
}
newBlocks = edgeLength * edgeLength;
sumBlocks = newBlocks;
// Check, if we still have enought blocks
if (sumBlocks <= availableBlocks)
{
level ;
} else
{
Console.WriteLine(level);
break;
}
}
}```
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/422790.html
標籤:
上一篇:內回圈的時間復雜度
