今天看到几个有意思的算法题,顺便记录一下
第一题:不允许使用循环语句和条件语句,在控制台中打印出1-200这200个数
//不允许使用循环语句和条件语句,在控制台中打印出1-200这200个数 public static bool PrintNumbers(int value) { Console.WriteLine(value.ToString()); return value >0 && value < 200 && PrintNumbers(++value); }
其实在算法中有很多有涉及到对二进制的妙用,下面为1-16的二进制
//00000001(1) //00001001 (9) //00000010(2) //00001010 (10) //00000011(3) //00001011 (11) //00000100(4) //00001100 (12) //00000101(5) //00001101 (13) //00000110(6) //00001110 (14) //00000111(7) //00001111 (15) //00001000(8) //00010000 (16)
第二题:判断一个数是不是偶数
//常见的写法 public static bool IsEvenNumber2(int value) { return value % 2 == 0; } //利用二进制 public static bool IsEvenNumber1(int value) { return value > 0 && (value >> 1 << 1).Equals(value); } //利用二进制 public static bool IsEvenNumber2(int value) { return (value & 1) == 0; }
第三题: 判断一个数是不是2的N次方
//判断一个数是不是2的N次方 public static bool ValueJudge(int value) { int valuePrev = value - 1; return (value & valuePrev).Equals(0); }
第四题:不用.Net自带的方法,将字符串转换为整型
//不用.Net自带的方法,将字符串转换为整型 public static int ToInt32(string value) { int result = 0; foreach (char val in value) { result = result * 10 + (val - '0'); } return result; }
第五题:交换两个整形变量的值
public static void Main(string[] args) { int value1 = 10; int value2 = 20; ExChangeValue(ref value1, ref value2); Console.WriteLine("Value1:{0}; Value2:{1}", value1, value2); } public static void ExChangeValue(ref int value1, ref int value2) { value1 ^= value2; value2 ^= value1; value1 ^= value2; }