总结 Date 2017.09.23

来源:互联网 发布:雷锋的故事 知乎 编辑:程序博客网 时间:2024/06/03 15:14

总结 Date 2017.09.23


<1>统计数字

某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

思路1:桶排序(但数字范围过大,舍)
思路2:自带排序函数(包含头文件#include< algorithm >)

具体代码:

    sort(a,a+n);    int k = 0;    for(int i = 0;i<n;i++)    {           b[k][1] = a[i];        if(a[i] == a[i+1])        {            b[k][0]++;        }else{            k++;        }    }

Sort函数的用法:

bool compare(int a,int b)
{
return a>b; // return 0 即 交换
}
sort(a,a+n,compare);

<2>蜜蜂路线

一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N,M小于N,有多少种爬行路线?

思路1:将路线转换为二维地图,两个数组表示前进方式,用搜索回溯算法(果断超时)
思路2:总结出递推式(赤裸裸的斐波那契数列),然后,果断超过long long 类型最大值,考虑高精度。

1 — 3 — 5 — 7………………
—2 —4 — 6………………

具体如下

int k1 = 500;b[500] = 1,c[500] = 0;for(int i = 500;i>=500-(n-m)+1;i--){    for(int j = 500;j>=k1;j--)    {        a[j] = b[j] + c[j];    }    for(int j = 500;j>=k1;j--)    {        if(a[j] >= 10)        {            a[j-1] += a[j]/10;            a[j] %= 10;            if(j == k1)            {                k1--;                j = 0;            }        }    }    for(int i = k1;i<=500;i++)    {        c[i] = b[i];    }    for(int i = k1;i<=500;i++)    {        b[i] = a[i];    }}

<3>Hanoi双塔问题

给定A、B、C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:
(1)每次只能移动一个圆盘;
(2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;
任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An。

思路1:还是公式,赤裸裸 2*(2^n-1),考虑高精度。
思路2:递归算法,很明显的递归,开冰箱放大象嘛(肯定超过数据类型的最大范围了)

具体如下:

    a[300] = 1;    int k = 300;    for(int i = 1;i<=n+1;i++)    {        for(int j = k;j<=300;j++)        {            a[j]*=2;            if(a[j] >= 10)            {                if(j == k)                {                    k--;                }                a[j-1] += a[j]/10;                a[j] %= 10;            }        }    }

递归版:

void hannuota(int n)  {      if(n==1)      {        sum++;    }    else{            hannuota(n-1);          sum++;        hannuota(n-1);    }}

终于,总结完了。

原创粉丝点击