一道面试题
来源:互联网 发布:淘宝好店推荐 编辑:程序博客网 时间:2024/04/28 00:22
如果n为偶数,则将它除以2,
如果n为奇数,则将它加1或者减1。
问对于一个给定的n,怎样才能用最少的步骤将它变到1。
例如:
n= 61
n-- 60
n/2 30
n/2 15
n++ 16
n/2 8
n/2 4
n/2 2
n/2 1
====
public class MyClass
{
private static int step=0;
private static List<string>
public static void Main()
{
Calc(99);
RL();
}
public static void PrintSteps()
{
Console.WriteLine("Need "+step.ToString());
for(int i = results.Count-1; i >0 ; i--)
{
Console.WriteLine("Step " + (results.Count-i).ToString() + " : " + results[i]);
}
Console.WriteLine(results[0]);
}
public static void Calc(int intputNumber)
{
step=0;
CalcStep(intputNumber);
PrintSteps();
}
public static void CalcStep(int num)
{
step++;
if(num>3)
{
if(num%2==0)
{
CalcStep(num/2);
results.Add(num.ToString() + @" / 2 = " + (num/2).ToString());
}
else
{
if((num+1)%4==0)
{
CalcStep(num+1);
results.Add(num.ToString() + "++ = " + (++num).ToString());
}
if((num-1)%4==0)
{
CalcStep(num-1);
results.Add(num.ToString() + "-- = " + (--num).ToString());
}
}
}
else
{
switch(num)
{
case 1:
step--;
results.Insert(0,"Number 1 is U need");
break;
case 2:
results.Insert(0," 2 / 2 = 1");
CalcStep(1);
break;
case 3:
results.Insert(0,"3 - 1 = 2");
CalcStep(2);
break;
}
}
}
#region Helper methods
private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break()
{
System.Diagnostics.Debugger.Break();
}
#endregion
}
- 一道微软面试题
- 一道面试题
- 华为一道面试题
- 一道面试题
- 一道面试题
- 一道sql面试题
- 一道面试题
- 一道面试题
- 一道华为面试题
- 一道面试题
- 一道微软面试题
- 一道c++面试题
- 一道sql面试题
- 关于一道面试题
- 一道面试题
- 一道microsoft面试题
- 一道javascript面试题
- 一道面试题
- 关于Eclipse3.2中出现的警告泛化
- 自定义标签4
- c# 反射的用法
- Linux - select详解
- CreateRemoteThread和WriteProcessMemory技术
- 一道面试题
- 什么是回调函数
- 深入浅出C#2008从入门到提高Step By Step(六)Windows应用程序实例(2)
- php开发socket模仿c/s结构
- SQL常用语句
- Visual C++开发工具与调试技巧整理
- Groovy1.5.5发布,编译器速度加快了3-5倍
- 持久层设计与ORM
- instanceof是什么?