算法两则

一、鸡兔同笼

已知共有鸡和兔共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位,取出需要的值
}
时间: 2024-08-09 09:41:01

算法两则的相关文章

编程算法 - 两个链表的第一个公共结点 代码(C)

两个链表的第一个公共结点 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入两个链表, 找出它们的第一个公共结点. 计算链表的长度, 然后移动较长链表的指针, 使其到相同结点的距离的相同, 再同时移动两个链表的指针, 找到相同元素. 时间复杂度: O(n) 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #i

python实现快速排序算法(两种不同实现方式)

# -*- coding: utf-8 -*- """ Created on Fri May 16 17:24:05 2014 @author: lifeix """ #快速排序 import sys import random length = 30 def qsort(arr,left,right): lp = left rp = right if lp == rp:return while True: while arr[lp] >=

算法--两道百度笔试题

算法--两道百度笔试题 今天看到一位园友写了一篇关于百度的面试题的博客,成了评论头条,再下看了一下,非常感兴趣,那位博主的算法能力跟我一样需要提高,估计他的功力还在我之下,所以再下不才,在这里把自己的源码贴出来. 百度面试题(一):假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数和正数间元素相对位置不变.时空复杂度要求分别为:o(n)和o(1).          其实开始的时候我也是一头雾水,在纸上画画之后发现,其实就是一道变形的插入排序.幸运的是

[算法]两字符串的最长子串

abractyeyt,dgdsaeactyey的最长子串为actyey const int maxSize = 100; char suffix[2][maxSize][maxSize]; int max_sub(char* s1, int len1, char* s2, int len2){ for(int r = 0; r < 2; ++r){ char* s; int len; if(0 == r){ s = s1; len = len1; } else{ s = s2; len = le

【裸单源最短路:Dijkstra算法两种版本】hdu 1874 畅通工程续

Source : hdu 1874 畅通工程续 http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. Input 本题目包含多组数据,请处理到文件结束.

算法--两个有序数组合并

两个有序数组合并 关键点:从后往前进行比较,这样保证数组A有用的部分不会因为在合并的过程中覆盖掉 第15节 有序数组合并练习题 有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B.请编写一个方法,将B合并入A并排序. 给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组. Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class Merge {

快速排序算法--两个小人扔萝卜

public static void quickSort(int[] A, int low, int high) { if(low < high) { int pivotpos = partition2(A, low, high); //完成pivot的定位 quickSort(A, low, pivotpos - 1); quickSort(A, pivotpos + 1, high); } } public static int partition1(int[] A, int low, in

hihocoder#1050 : 树中的最长路(树中最长路算法 两次BFS找根节点求最长+BFS标记路径长度+bfs不容易超时,用dfs做TLE了)

#1050 : 树中的最长路 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一棵二叉树!还可以拼凑成一棵多叉树——好吧,其实就是更为平常的树而已. 但是不管怎么说,小Ho喜爱的玩具又升级换代了,于是他更加爱不释手(其实说起来小球和木棍有什么好玩的是吧= =).小Ho手中的这棵玩具树现在由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不

编程算法 - 两个升序列的相同元素 代码(C)

两个升序列的相同元素 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 两个升序列的相同元素, 需要使用两个指针, 依次遍历, 如果相等输出, 如果小于或大于, 则增加一个指针. 直到输出所有的值. 代码: /* * main.cpp * * Created on: 2014.9.19 * Author: spike */ #include <stdio.h> int Common(int data1[], int length1, int dat