iT邦幫忙

0

[TIOJ] 1026. 惡猿果實

題目連結:http://tioj.infor.org/problems/1026
題目的意思是當開始走路後,第一步是一公尺,每次步伐是上一次的兩倍,目標的公尺距離是奇數,並且可以往前和往後走。

每次步伐的距離因為都是2倍,剛好跟二進位的算法是一樣的,不過二進位是用累加方式計算,本題有加有減,但是只要轉換一下想法,因為剛好是兩倍,所以下一步減現在這一步會等於這一步的距離,所以只要把二進位為0的部分變成1,然後右邊一階變成0,就可以跟二進位一樣的算法了。

由於本題輸入是奇數,所以二進位最右邊必定為1可以不必判斷。

string input = Console.ReadLine();
long length = 0;
List<string> direct = new List<string>();

if (Int64.TryParse(input, out length))
{
  if(length > 0)
    length /= 2;

  for (long remainder = length % 2; length > 0; length /= 2, remainder =  length % 2)
  {
    direct.Add(remainder == 0? "-" : "+");

    if (length / 2 == 0)
      direct.Add("+");
  }
                
    Console.WriteLine("{0}\n{1}", direct.Count, string.Join(" ", direct.ToArray()));
}

尚未有邦友留言

立即登入留言