| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4966 人关注过本帖, 1 人收藏
标题:出个水题,看有多少能做出来的。
只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用jiangwu10057在2010-1-30 17:46:24的发言:

我还是先想清楚为什么是哪个算法好了毕竟程序=算法+数据结构



显然,都走歪了,这个题目是用加法算的。。。

不是用乘法。
2010-01-30 17:54
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
好的我再想想·
这个是原来的想法
程序代码:
运算量
=n!/(m!*(n-m)!)
=n*(n-1)(n-2)....(n-m+1)/m!
=循环次数/for语句中重复的次数
=(n/m)*((n-1)/(m-1))*```````(n-m+1)/1
楼主的意图是通过单个数先相除获得个比较小数在相乘
看来还是错了·
有给新思路
最后一重循环对于不同的i(n>=i&&i=m)被定位的次数是不一样的
我只要算出每个数被定位的次数相加就知道运算次数了


[ 本帖最后由 jiangwu10057 于 2010-1-30 19:49 编辑 ]
2010-01-30 18:09
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
Hint:

C(m,n)=C(m-1,n-1)+C(m-1,n)

[ 本帖最后由 Devil_W 于 2010-1-30 20:09 编辑 ]
2010-01-30 20:07
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
我查了下C(m,n)=C(m-1,n-1)+C(m,n-1)才是正确的//呵呵高中课程没有一科学好了·所以
另外这个加法最后难免还是个大数所有的基本类型应该都存不下,能解释下·?谢谢哈·

[ 本帖最后由 jiangwu10057 于 2010-1-30 20:31 编辑 ]
2010-01-30 20:29
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
没看到取模?
2010-01-30 21:29
tonysf
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-1-31
收藏
得分:0 
各位大侠,
    你们好!我是c语言新手,最近用钟家明的c语言学习实验集成系统2010版打开一个mp3文件,用了下面的程序,老是报告说文件无法打开!出现 c4013 和c4101两个警告。这两个程序用钟家明以前老版本学习系统都通过了的,不知是我新购买新版本有问题,还是我的程序有问题,发了两封电邮请教钟家明老师,也没有得到回信,请各位大侠不吝帮助,在下谢谢了。我打开二进制文件读写目的是希望把英语的一个mp3 文件分成几个更短的mp3 文件,以前我完成过,这次却无法打开二进制文件。以前的程序又丢失了。
   这是我第一次在此发帖,不知是否正确。
下面是源程序
#include "stdio.h"
 main()

    {FILE *in, *out;
        
   
   char ch,infile[20],outfile[20];
   
   printf(" Enter the infile name:\n");
   scanf("%s", infile);
   
   
   printf(" Enter the outfile name:\n");
   scanf("%s", outfile);
   
   if ((in=fopen(infile,"rb"))==NULL)
     {printf("cannot open infile\n");
         exit(0);
     }
   if ((out=fopen(outfile,"wb"))==NULL)
     {printf(" cannot open outfile\n");
         exit(0);
     }
     while (!feof(in)) fputc(fgetc(in),out);
     fclose(in);
     fclose(out);
     
}
2010-01-31 02:59
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
回复 35楼 Devil_W
是说对1007取模?哦谢谢哈·
2010-01-31 07:41
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
没推导,直接DP暴力了下

程序代码:
#include<stdio.h>
#include<string.h>
#define M 2001
int ans[M][M];
int dp(int m, int n)
{
    int i;
    if(ans[m][n]!=-1) return ans[m][n];
    ans[m][n] = 0;
    for(i=m-1; i<n; i++) ans[m][n] += dp(m-1, i);
    return ans[m][n]%=1007;
}
int T;
int m, n;
int main(void)
{
    int i;
    memset(ans, -1, sizeof(ans));
    for(i=1; i<M; i++) ans[1][i] = i%1007;
    scanf("%d", &T);
    while(T --)
    {
        scanf("%d %d", &m, &n);
        printf("%d\n", dp(m, n));
    }
    return 0;
}


上面的代码是一个很简单的2D/1D的动态规划,应该是有一维优化余地的。

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2010-01-31 18:39
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
就是杨辉三角查表

#include <stdio.h>

#define MAXSIZE 2001

long data[MAXSIZE][MAXSIZE] ;

int main(void)
{
        int   n , m , i , j ;
        scanf("%d%d" , &m , &n) ;
        for (i = 0; i <= n ; i++) {
                for (j = 0 ; j <= i ; j++) {
                     if (j == 0 || j == i )
                         data[i][j] = 1 ;
                     else
                         data[i][j] = (data[i-1][j-1] + data[i-1][j]) % 1007 ;
                }
        }


                        printf("%d " , data[n][m] );



  return 0 ;
}

[ 本帖最后由 iFreeBSD 于 2010-1-31 20:04 编辑 ]

without further ado, let’s get started
2010-01-31 18:46
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
用上面的程序输出了个小表,然后规律就出来了
程序代码:
#include<stdio.h>
#include<string.h>
#define M 2001
int ans[M][M];
int main(void)
{
    int i, j;
    int T, m, n;
    for(i=1; i<M; i++) ans[1][i] = i;
    for(i=2; i<M; i++)
    {
        for(j=1; j<M; j++) ans[i][j] = (ans[i-1][j-1] + ans[i][j-1]) % 1007;
    }
    scanf("%d", &T);
    while(T --)
    {
        scanf("%d %d", &m, &n);
        printf("%d\n", ans[m][n]);
    }        
    return 0;
}


是一个2D/0D的dp,相比上面的程序有了一维的优化


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2010-01-31 18:52
快速回复:出个水题,看有多少能做出来的。
数据加载中...
 
   



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

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