| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2035 人关注过本帖
标题:这道题想了很久,实在不行了,来帮忙看看,给个思路就好
只看楼主 加入收藏
vdestroyer
Rank: 2
等 级:论坛游民
帖 子:136
专家分:14
注 册:2009-1-7
结帖率:96.43%
收藏
 问题点数:0 回复次数:20 
这道题想了很久,实在不行了,来帮忙看看,给个思路就好
这道题看起来很容易,也想了很久,试了很多种方法,可就是不行。。。。

实在没办法,麻烦大家给看看,能给提供个比较具体的解题思路就行。

题目:
现在需要有很多条 木条,把这些木条头尾对接,来接成一个长长的木头棍。
这些木条,只有三种长度,一米,两米和三米。每一种木条都有无限多个。
写个程序,根据所输入所接成的木头棍的长度,算出能用多少种不同的方法来接出该长度的木头棍。

如果木头棍的长度为N,那么 1 <= N <= 24
也就是说,输入的数据仅在1至24之间的所有整数。


如果输入的数据是4的话,那按照图片,可以看出:
http://i805.

程序运行例子:
木头棍的长度 ? 4
一共有7种组合。
搜索更多相关主题的帖子: 思路 
2009-11-02 04:21
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:0 
#include "stdio.h"
int main(void)
{
    int N,a,b,c,num=0,ma,mb,mc;
    printf("input the long of a integer(1-24)):");
    scanf("%d",&N);
    while(N<1||N>24)
    {
        printf("input error !please input again:");
        scanf("%d",&N);
    }
    printf(" No.\t1\t2\t3\n");
    printf("-------------------------\n");
    ma=N/1;
    mb=N/2;
    mc=N/3;
    for(a=0;a<=ma;a++)
    {
        for(b=0;b<=mb;b++)
        {
            for(c=0;c<=mc;c++)
                if(a*1+b*2+c*3==N)
                {
                    num++;
                    printf("%3d.\t%d\t%d\t%d\n",num,a,b,c);
                }
        }
    }
    getch();
    return 0;
}


图片附件: 游客没有浏览图片的权限,请 登录注册
2009-11-02 09:18
vdestroyer
Rank: 2
等 级:论坛游民
帖 子:136
专家分:14
注 册:2009-1-7
收藏
得分:0 
不对啊,ls写的这个还是不对,麻烦看一下顶楼的那张图。
不同数字之间组合,顺序不同也算做一次组合。

[ 本帖最后由 vdestroyer 于 2009-11-2 14:29 编辑 ]
2009-11-02 14:22
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
还有没有另外的输入输出范例?我想验证一下我的猜想。
2009-11-02 23:32
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
其实就是一个3进制而已,不过写搜索是最简单的……

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-11-03 00:15
vdestroyer
Rank: 2
等 级:论坛游民
帖 子:136
专家分:14
注 册:2009-1-7
收藏
得分:0 
回复 4楼 广陵绝唱
根据顶楼那张图的规律看就知道了啊
我写不出程序来啊,只能用笔和纸来算。

如果输入是5的话,那输出的就应该是10啊
2009-11-03 18:07
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 6楼 vdestroyer
输入 5 应该是 13,多谢 SW 的提醒,终于写出来了。虽然这种方法很暴力,但总算是作出来了吧。期待能有更快捷的方法出现。

下面把我的代码发出来,献丑了:



程序代码:
#include <stdio.h>
#include<string.h>
#define N 25
int main(void)
{
    char a[N],tmp[N];
    int n,i,count;
   
    n=1;
    while((scanf("%d",&n))==1&&n>0&&n<N)
    {
        count=1;
        for(i=0;i<n;++i)
        {
            a[i]=tmp[i]='1';
        }
        a[i]=0;
        //puts(a);
        while(1)
        {
            int num=0;
            a[n-1]++;;
            for(i=n-1;i>0;--i)
            {
                if(a[i]>'3')
                {
                    a[i]='1';
                    a[i-1]++;
                }
            }
            if(a[0]>'3')
            {
                break;
            }
            for(i=0;i<n;++i)
            {
                num+=(a[i]-'0');
                if(num==n&&strncmp(a,tmp,i+1))
                {
                    strncpy(tmp,a,i+1);
                    tmp[i+1]=0;
                    //puts(tmp);
                    count++;
                    break;
                }
            }
        }
        printf("NO. %d is %d \n",n,count);
    }
    return 0;
}

2009-11-04 00:35
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 7楼 广陵绝唱
这个是 变相的 斐波那 数列
用数组 迭代    时间复杂度为 O(n)

我就是真命天子,顺我者生,逆我者死!
2009-11-04 07:52
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
#include <stdio.h>
#define N 25

int main(void)
{
    int F[N] = {0,1,2,4};
    int i;

    for (i = 4; i < N; i++)
        F[i] = F[i-1] + F[i-2]+ F[i-3];

    for (i = 1; i < N; i++)
        printf("%d: %d\n", i, F[i]);

    return 0;
}

[ 本帖最后由 BlueGuy 于 2009-11-4 07:58 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2009-11-04 07:56
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 5楼 StarWing83
如果是我的话  
笔试的时候  求子集 或者 排列  我宁愿写个 二进制加法 或者是 很长的 for ()循环
我宁愿  广度优先搜索  也 不愿 深度优先搜索...
我记不住 递归. 也不能保证写的递归的正确性
有些算法我永远忘不了, 有些算法我永远记不住。
有些代码不注释我也看的懂, 有些代码注释了我还是看不懂。 叹一个

[ 本帖最后由 BlueGuy 于 2009-11-4 09:27 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2009-11-04 08:04
快速回复:这道题想了很久,实在不行了,来帮忙看看,给个思路就好
数据加载中...
 
   



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

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