开始的数学

数学真的太深奥了
开始看数学了,
第一本书,组合数学引论 作者: 孙淑玲,许胤龙 这本书挺好的,学到了好多的东西
下面介绍一下这几天做的题,不知为什么,感觉这几个题都太”奇怪“了
poj 1150 The Last Non-zero Digit
题目大意:求n!的最后一位非零位的数字是什么

这个题的数据规模有点大,10^8,也就是说暴力是不行的了

这个题的思路是,在n!里面取出2和5,然后判断断1379的个数,哎,

这个里面的东西很不错http://duanple.blog.163.com/blog/static/7097176720081016113033592/


#include <string.h>
#include <string.h>
#include <stdio.h>
using namespace std;
#define DEBUG 1
#undef DEBUG
int get2(int n)
{
    if(n == 0) return 0;
    return n/2+get2(n/2);
}
int get5(int n)
{
    if(n == 0) return 0;
    return n/5+get5(n/5);
}
int odd_getX(int n,int x)
{
    if(n == 0) return 0;
    return n/10+(n%10 >= x)+ odd_getX(n/5,x);
}
int getX(int n,int x)
{
    if(n == 0) return 0;
    return getX(n/2,x)+odd_getX(n,x);
}

int solve(int n,int m)
{
    int two,five,one,three,seven,nine;
    int table[4][4] =
    {
        6,2,4,8,//last digit of 2^4 2 2^2 2^3
        1,3,9,7,//...3
        1,7,9,3,//...7
        1,9,1,9,//...9
    };
    m = n-m;
    two = get2(n)-get2(m);//二的个数
    five = get5(n)-get5(m);// 5
    one = getX(n,1) - getX(m,1); // 1 对结果不起作用
    three = getX(n,3) - getX(m,3); // 3 
    seven = getX(n,7) - getX(m,7);
    nine = getX(n,9) - getX(m,9);

    int last_digit = 1;
    if(two < five) return 5;
    else
    {
        if(two > five) last_digit *= table[0][(two-five)%4];
        last_digit *= table[1][three%4];
        last_digit *= table[2][seven%4];
        last_digit *= table[3][nine%4];
        return  last_digit % 10;
    }
}

int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m) == 2)
    {
        printf("%d\n",solve(n,m));
    }
}

poj 1715 Hexadecimal Numbers 
题目大意:求第n大得8位16进制数,注意可以少于8位

poj 2282 The Counting Problem

题目大意:求a到b中0到9这十个数字出现的次数

解题思路:f(n) = f(n/10-1)*c + deal(n%10) + deal(出现n%10的时候n/10中的数字)

具体点就是,我们可以先考虑最后一位的情况,例如192 那么到189就是最后一位循环了19次,这样就可以不考虑最后一位了,然后处理最后一位的时候我们还得看路大于189的情况,这个就是后面两项的结果。

poj 1430  Binary Stirling Numbers

题目大意:简单点就是,给出m,n求第二类stirling数是奇数还是偶数

这个题,确实对于我来说有一定的难度,我不会啊,看别人的解题报告,看到了一个不错的思路,但是我算了好几遍,还是没有算对,但是,我还是感觉这个思路很好 ,解题报告推荐如下:

http://gisyhy.blog.163.com/blog/static/12939034320104603214437/

望各位大牛指教


上面的几个题,我觉得都有点奇怪,难道acm就是这么考组合数学的??


你可能感兴趣的:(开始的数学)