| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4964 人关注过本帖, 1 人收藏
标题:出个水题,看有多少能做出来的。
只看楼主 加入收藏
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
算法是n!/(m!*(n-m)!)

[ 本帖最后由 jiangwu10057 于 2010-1-30 14:19 编辑 ]
2010-01-30 11:53
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
对不起,呵,刚才发错了,是另一个网友的帖子上的代码,我替他改的,直接复制过来了.


下面的是我写的,尽管可能不对,但敬请指正.

程序代码:
#include <stdio.h>
#define N 1007

int fun(int ,int ,int ,int);

int main(void)
{
    int  t,m,n;

    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&m,&n);
        printf("%d\n",fun(m,n,1,0));
    }

    return 0;
}

int fun(int m,int n,int i,int sum)
{
    int j;

    if(!m)
    {
        return sum;
    }
    else
    {
        for(j=i;j<=n;++j)
        {
            ++sum;
        }
        return  fun(m-1,n,i+1,sum%N);
    }
}
2010-01-30 11:54
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
噢,好象是 n 的阶乘 除以 m ,现在有点忙,一会再做一下.
2010-01-30 11:57
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
你连样本数据都没过。。。


-BASH-4.0.35$ ./outcome
2
1 3
3
2 3
5
-BASH-4.0.35$



2 3 的output应该是3你的是5
2010-01-30 12:10
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 14楼 Devil_W
明白了,大数阶乘与大数除法.谢谢.
2010-01-30 12:24
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 14楼 Devil_W
有没有大数除法的测试数据给我些,网上没搜到,我写过之后好测试一下.
2010-01-30 12:41
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
这题目,显然可以不需要处理大数。
我觉得,你还是应该先把题目再分析分析。
2010-01-30 12:51
jimmywood
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:30
专家分:109
注 册:2009-8-10
收藏
得分:0 
程序代码:
#define N   1007

int test(int m, int n)
{
    int i, j, k;
    int *arr = new int[n + 1];            

    for (i = 1; i <= n; i++)        
        arr[i] = 1;

    for (i = 2; i <= m; i++)
    {
        for (j = n; j > 0; j--)
        {
            arr[j] %= N;
            if (arr[j] != 0)
            {
                for (k = j + 1; k <= n; k++)
                    arr[k] += arr[j];
            }
            arr[j] = 0;
        }    
    }

    int count = 0;
    for (i = 1; i <= n; i++)
    {
        count += arr[i];
    }
    count %= N;
    
    delete []arr;
    
    return count;
}
2010-01-30 13:14
jimmywood
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:30
专家分:109
注 册:2009-8-10
收藏
得分:0 
刚才贴完程序就有事离开了

程序的基本思路是逐层替换, 也不知道有没有错, 就暂时不详细描述了 呵呵

楼主能给几组大点的数据让我测试下不?
2010-01-30 14:08
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用jiangwu10057在2010-1-30 11:53:20的发言:

算法是n!/(m!*(n-m)!)


式子是对了。

只是你怎么处理溢出的问题。

你可以证明你这个式子吗?
2010-01-30 16:19
快速回复:出个水题,看有多少能做出来的。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022163 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved