星期五, 9月 11, 2009

(題目)畫出數字山..

今天在網路看到一個有趣的面試問題..問題是..

問.試設計出如下顯示的排列方式。(不限任何程式,要用c要用php要用vb隨你)
1
22
333
44
5

花了一點時間..寫了下列的class去處理..

public class StringPrinter
{
public void PrintResult(int maxShowNumber)
{
int maxPosition;
if (maxShowNumber % 2 == 1)
{
//單數
maxPosition = (maxShowNumber + 1) / 2;
PrintUpDown(maxShowNumber, maxPosition, true);
}
else
{
//表示他是偶數
maxPosition = (maxShowNumber) / 2;
PrintUpDown(maxShowNumber, maxPosition, false);
}
}
/// <summary>
/// 從上到下畫出來
/// </summary>
/// <param name="maxShowNumber"></param>
/// <param name="maxPosition"></param>
private void PrintUpDown(int maxShowNumber, int maxPosition, bool isOdd)
{
bool hook = isOdd;
//畫出前半部
int showNumber = 0;
for (int i = 1; i <= maxPosition; i++)
{
showNumber++;
PrintLine(showNumber, i);
}
//畫出後半部
for (int i = showNumber; i > 0; i--)
{
if (hook)
{
hook = false;
continue;
}
showNumber++;
PrintLine(showNumber, i);
}
}
/// <summary>
/// 畫出每行該出現的數字
/// </summary>
/// <param name="number"></param>
/// <param name="position"></param>
private void PrintLine(int number, int position)
{
string strTemp = string.Empty;
for (int i = 1; i <= position; i++)
{
strTemp = string.Concat(strTemp, number);
}
Console.WriteLine(strTemp);
}
}

結果如下面..

輸入9..

image

輸入8..

image

感想..

一開始看到這題目感覺不難..在寫的過程中..其實要很清楚自己在做什麼..因為邊寫邊看電視..寫到一半迷路了..哈..
可以養成習慣先畫圖..大綱抓出來..在寫..就不容易迷路了..

沒有留言: