| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1493 人关注过本帖
标题:大家一起来做题:二维数组取数求和。给力--->给分!
只看楼主 加入收藏
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 10楼 beyondyf
确实是这样的  杨大哥说的不错   又学习了

所以楼主的题目是不能打印的  最多只能求个总数

                                         
===========深入<----------------->浅出============
2012-01-22 09:54
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
根据杨大哥的提示  刚刚找到了原题 pku 1664 http://  分冶算法确实很好用  以后一定尽量多想想 少写回溯  谢谢杨大哥
程序代码:
#include <stdio.h>
#include <string.h>

int f(int m,int n)
{ if(m<0)
   return 0;
  if(m==0||n==1)
   return 1;
  return f(m-n,n)+f(m,n-1);
}

int main()
{
    int t;
    scanf("%d",&t);
    int m,n;
    while(t--)
    {
        scanf("%d%d",&m,&n);
        printf("%d\n",f(m,n));
    }
    return 0;
}

/*
最少的盘子放了一个,这样每个盘子至少一个,n个盘子先放上n个,剩下的m-n个可以随便放
最少的盘子没有放,这样剩下的n-1个盘子还是随便放m个
*/


                                         
===========深入<----------------->浅出============
2012-01-22 10:05
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:15 
各位新年快乐

这题答案用数学推出来应该就是C(n+m-2,n-1)
2012-01-22 12:52
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
小曹过年好!知道你这两天上网不方便,能看到你来很开心

我一直认为程序的灵魂是算法,而算法的灵魂是数学。希望以后多来交流!

重剑无锋,大巧不工
2012-01-23 10:52
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
哇,我刚回来啊。自动结贴啦。

梅尚程荀
马谭杨奚







                                                       
2012-01-29 20:59
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 12楼 laoyang103
运行老杨的程序后得到的数貌似很小 我写了个求总数的 不知道对不对 当n 比13大的时候要计算1分钟多,而且int型已经装不下了。
程序代码:
#include  <stdio.h>

int  fun(int n, int m)
{
    int i;
    int sum = 0;

        if (m  <= 0 || n <= 0)
            return  0;
        if (m  == 1 || n == 1)
            return 1;
        if (m  == 2)
            return n;
        if (m  > 2 && n > 1)
        {
            for(i = 0; i <= m - 1; i++)
            {
                sum += fun(n - 1, m - i);
            }
            return sum;
        }
           
}

int  main()

{
    int m, n;
   

    printf("please input n & m: ");
    while(EOF != scanf("%d%d", &n, &m))
    printf("the result is %d\n", fun(n, m));
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

梅尚程荀
马谭杨奚







                                                       
2012-01-29 23:29
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
不知道对不对
程序代码:
#include  <stdio.h>
#include  <time.h>
#include  <windows.h>
#include  <dos.h>

double  fun(int n, int m)
{
    int i;
    double sum = 0;

        if (m  <= 0 || n <= 0)
            return  0;
        if (m  == 1 || n == 1)
            return 1;
        if (m  == 2)
            return n;
        if (m  > 2 && n > 1)
        {
            for(i = 0; i <= m - 1; i++)
            {
                sum += fun(n - 1, m - i);
            }
            return sum;
        }   
}

int  main()

{
    int m, n;
    double sum;
    float start, end;
   
    printf("please input n & m: ");
    while(EOF != scanf("%d%d", &n, &m))
    {
    start = clock();
    sum = fun(n, m);
    printf("the result is %lf\n", sum);
    end = clock();
    printf("time = %3.3f\n", (end-start)/CLK_TCK);
    }
    return 0;
}


图片附件: 游客没有浏览图片的权限,请 登录注册


梅尚程荀
马谭杨奚







                                                       
2012-01-30 00:21
yxiangyxiang
Rank: 3Rank: 3
来 自:/\/\/\/\/
等 级:论坛游侠
帖 子:130
专家分:186
注 册:2012-1-29
收藏
得分:0 
#include <stdio.h>

int main( void )
{
    int        i, j, k, l=0;
    int        a[3][4]={{0, 1, 2, 3},{0, 1, 2, 3},{0, 1, 2, 3}};
    int        b[12];
   
    for( i=0; i<3; i++ )
        for( j=0; j<4; j++ )
            b[i*4+j] = a[i][j];
    for( i=0; i<10; i++ )
    {
        for( j=i+1; j<11; j++ )
        {
            for( k=j+1; k<12; k++ )
                if( b[i]+b[j]+b[k]==3 )
                    l++;
        }
    }
    printf("一共有 %d 种\n", l);
   
    return 0;
}
2012-02-01 23:18
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 18楼 yxiangyxiang
3行4列应该有10种方案,你的是37,结果不对呢。

梅尚程荀
马谭杨奚







                                                       
2012-02-02 10:22
快速回复:大家一起来做题:二维数组取数求和。给力--->给分!
数据加载中...
 
   



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

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