| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4966 人关注过本帖, 1 人收藏
标题:出个水题,看有多少能做出来的。
只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
结帖率:100%
收藏(1)
 问题点数:0 回复次数:59 
出个水题,看有多少能做出来的。
在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分。

例如,

如果代码中出现
for(i=1;i<=n;i++) OP ;

那么做了n次OP运算,如果代码中出现

for(i=1;i<=n; i++)
  for(j=i+1;j<=n; j++) OP;


那么做了n*(n-1)/2 次OP 操作。

现在给你已知有m层for循环操作,

且每次for中变量的起始值是上一个变量的起始值+1(第一个变量的起始值是1),

终止值都是一个输入的n,问最后OP有总共多少计算量。

有T组case,T<=10000。每个case有两个整数m和n,0<m<=2000,0<n<=2000

对于每个case,输出一个值,表示总的计算量,也许这个数字很大,那么你只需要输出除1007留下的余数即可。

sample input:

2
2 3
1 3

sample output:

3
3
搜索更多相关主题的帖子: 编程 
2010-01-29 21:40
Devon_Ye
Rank: 4
来 自:广东
等 级:业余侠客
帖 子:124
专家分:282
注 册:2010-1-7
收藏
得分:0 
赶紧闪先
2010-01-30 00:41
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
long Factorial(long n,long m)
{
    long i,fact=1;
    for(i=n;i>n-m;i--)
        fact*=i;
    return fact;
}
main()
{
    long i,m[10000],n[10000],t,op;

    scanf("%ld",&t);
    for(i=1;i<=t;i++)
        scanf("%ld%ld",&m[i],&n[i]);
    for(i=1;i<=t;i++)
        if(m[i]==1)
            printf("%ld\n",n[i]%1007);
        else
        {
            op=Factorial(n[i],m[i])/m[i];
            printf("%ld\n",op%1007);
        }
}

[ 本帖最后由 jiangwu10057 于 2010-1-30 09:07 编辑 ]
2010-01-30 07:53
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用jiangwu10057在2010-1-30 07:53:29的发言:

long Factorial(long n,long m)
{
    long i,fact=1;
    for(i=n;i>n-m;i--)
        fact*=i;
    return fact;
}
main()
{
    long i,m[10000],n[10000],t,op;

    scanf("%ld",&t);
    for(i=1;i<=t;i++)
   ...



相去甚远。

程序代码:
long Factorial(long n,long m)
{
    long i,fact=1;
    for(i=n;i>n-m;i--)
        fact*=i;
    return fact;
}


就这两行,你没发现它会溢出?
2010-01-30 09:56
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
我再改改··我还是个新手··
2010-01-30 10:15
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用jiangwu10057在2010-1-30 10:15:19的发言:

我再改改··我还是个新手··



你比那些菜鸟,还有那些不懂装懂的所谓高手好了多了。

就从你刚才那个函数,我已经基本看出来你的思路了。

你的思路,差一点就对了。

解题愉快。
2010-01-30 10:19
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
谢谢··不过遇到瓶颈了·就是不知道要如何处理大数
2010-01-30 11:06
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
    呵,事先声明,我也是菜鸟,来凑个热闹.楼主给的测试数据没看明白,按照自己的理解写了一下,欢迎拍砖.楼主最好给出多一些的测试数据,然后我们按照测试数据自己 AC 一下.

    下面的代码是我写的,欢迎楼主及各位有识之士批评指正,感激不尽.

程序代码:
#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;
        }
         fun(m-1,n,i+1,sum%N);
    }
}



[ 本帖最后由 广陵绝唱 于 2010-1-30 11:52 编辑 ]
2010-01-30 11:28
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
while (number>=1)
{
        --number;
        result+= (result*number);
}
这个算阶乘···太牛了·
2010-01-30 11:41
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
这个题目虽然水。

也没水到你两个想的那个级别。。。

先读懂题目。。
2010-01-30 11:44
快速回复:出个水题,看有多少能做出来的。
数据加载中...
 
   



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

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