• 算法两则


    一、鸡兔同笼

    已知共有鸡和兔共15只,共有40只脚,问:鸡和兔各有几只?

      一般人看见这样的问题都是立刻想到二元一次方程式,一下就解决了,其实还有更简单的,不用写算式,心算可以出结果。

      新算法:

        假设鸡和兔都训练有素,吹一声哨,抬起两只脚,40-15*2 = 10,此时鸡都屁股坐地了,剩下都是兔子两脚战地,故:

        兔子数量:10 / 2 = 5(只)      鸡的数量:15 - 5 = 10(只)

    二、字符(字符串)转二进制数组

      刚刚开始学习C语言时候,会练习打印一个字符的二进制形式,又因为平时学习二进制转换时,都是循环除的方式得出二进制形式,故经常写的 C 语言代码:

      

        int num = 10;
        int i = 0;
        int temp = 0;
        int arr[8] = {0};
        while (num)
        {
            arr[i] = num % 2;
            num /= 2;
            i++;
        }
        for (i = 0; i < 4; i++)
        {
            temp = arr[i];
            arr[i] = arr[7-i];
            arr[7-i] = temp;
        }

      这样写出来看起来比较臃肿,其实可以进行优化。当学习了C 语言的位操作之后,就可以优化的很简单了:

    int num = 10;
    for (int j = 0; j < 8; j++)
     {
        temp = num << j;       //j:取出字符第 j 位数值 循环左移j位
        temp = temp & 0x80;    //按位与,取出最高位  此处防止32位寄存器处理时,num高位值在更高的位置保留,没有达到置零效果,进而影响后一步取值出错
        arr[j] = temp >> 7;    //右移7位,取出需要的值
    }
    ded3
  • 相关阅读:
    从面向对象到SOA
    我对国内软件开发类书籍出版与写作的体会与努力
    MSDN for 2010的那些麻烦事
    金旭亮新作《.NET 4.0面向对象编程漫谈》之序“穿越梦想、起锚远航”
    Silverlight应用程序的本地通讯
    C#中Dictionary的用法
    泛型
    动态规划算法
    C# Timer
    面向对象程序设计寒假作业1
  • 原文地址:https://www.cnblogs.com/dedeblog/p/6061058.html
Copyright © 2020-2023  润新知