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

例如,

如果代码中出现
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
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
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
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
这个题目虽然水。

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

先读懂题目。。
2010-01-30 11:44
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
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
这题目,显然可以不需要处理大数。
我觉得,你还是应该先把题目再分析分析。
2010-01-30 12:51
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
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
看来你还是没办法证明的你式子。。。

你没变法证明,估计你也找不到你这个处理溢出的方法。
2010-01-30 16:34
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用广陵绝唱在2010-1-30 16:58:32的发言:

楼主能不能给解释一下?我搜了一下,这题是百度贴吧上 2008 年的老帖子.



广陵,你的算法要提高了。

我从用wxjeacen号的时候你就做版主。

到了现在,code的能力并没有想像的有很大的提高。

说句实话,我其实挺佩服你的中庸风格的,从不得罪人。

可是技术跟做人是两回事。
收到的鲜花
  • 广陵绝唱2010-01-30 17:32 送鲜花  49朵   附言:谢谢,期待看到你最后的解题 code
2010-01-30 17:20
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用广陵绝唱在2010-1-30 17:19:35的发言:

呵,也不知道这道题在哪个 OJ 上,另外也不知道 LZ 有没有测试数据,总之下面的代码的结果是 LZ 给出的例子当中完全吻合的.


#include <stdio.h>
#define N 1007

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

int main(void)
{
    ...



我测试了下,你的递归效率真的很低。

2
1 2
2 5

2
5

2 5的结果,显然不是5,应该是10....
2010-01-30 17:53
快速回复:出个水题,看有多少能做出来的。
数据加载中...
 
   



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

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