| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2035 人关注过本帖
标题:这道题想了很久,实在不行了,来帮忙看看,给个思路就好
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
那是因为你没理解。慢慢来,你会发现递归的美妙的,别怕任何东西,任何知识之所以存在,就都是可以被人理解的。

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-11-04 11:06
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
恩,不过你说的数列法很有道理,看来这题可以DP,用不着搜索。

那么,BlueGuy,如果要求给出具体方案,你怎么写代码呢?(如果用DP,是可以很轻易得到具体方案的)

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-11-04 11:08
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 11楼 StarWing83
有道理, 谢谢

我就是真命天子,顺我者生,逆我者死!
2009-11-04 11:56
zhjr5201314
Rank: 4
等 级:业余侠客
帖 子:63
专家分:238
注 册:2009-9-10
收藏
得分:0 
#include<stdio.h>
#include <string.h>

int d[25];
void Permutation(int s[], int i, int l);
int   count = 0;

void main()
{
    int N;
    int i,j,k,s;
    int a[25];
    scanf("%d",&N);
    for(i=0;i<=N/3;i++)
    for(j=0;j<=N/2;j++)
    for(k=0;k<=N;k++)
    {
    memset(a,'\0',sizeof(a));
        if(3*i+2*j+k==N)
        {
            if(k!=0)
            {
                for(s=0;s<k;s++)
                a[s]=1;
            }
            if(j!=0)
            {
                for(s=k;s<j+k;s++)
                a[s]=2;
            }
            if(i!=0)
            {
                for(s=j+k;s<j+k+i;s++)
                a[s]=3;
            }
      Permutation(a, 0, i+j+k);      
        }
    }
}
void Permutation(int s[], int i, int n)
{
int j,k=0;
int temp;
for(j = 0; j < n; j ++)
   if(s[j] == s[j - 1])
    ;
   else if(s[j] != '#')
   {
    d[i] = s[j];
    temp = s[j];
    s[j] = '#';
    if(i == n - 1)
    {
     d[n] = '\0';
     printf("%d:\t", ++ count);
     while(d[k]!='\0')
     printf("%d\t",d[k++]);
     printf("\n");
    }
    else Permutation(s, i + 1, n);
    s[j] = temp;
   }
}
贴一下!
2009-11-04 16:20
vdestroyer
Rank: 2
等 级:论坛游民
帖 子:136
专家分:14
注 册:2009-1-7
收藏
得分:0 
谢谢诸位高手
看到讨论的内容都能学到很多东西
2009-11-05 06:41
burningbebe
Rank: 2
等 级:论坛游民
帖 子:41
专家分:19
注 册:2009-10-31
收藏
得分:0 
回复 楼主 vdestroyer
先找个数学高手问问吧 我记得我高中的数学老师 在将排列组合的时候 拓展了一个类似的例子!!!

世界上最遥远的距离不是生与死,而是网通和电信!
2009-11-05 08:01
dong152liang
Rank: 2
来 自:廊坊
等 级:论坛游民
帖 子:56
专家分:29
注 册:2009-11-8
收藏
得分:0 
#include<stdio.h>
void main()
{
    int i,j,k,sum,a=1,b=2,c=3;
    printf("input the long of a integer(1-24)\n");
        scanf("%d",&sum);
    for(i=0;i<=24;i++)
        for(j=0;j<=12;j++)
            for(k=0;k<5;k++)
            if    (sum==a*i+b*j+c*k)
            printf("a=%d,b=%d,c=%d\n",i,j,k);
}
2009-11-15 15:02
wylzjcw
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:185
专家分:174
注 册:2009-1-4
收藏
得分:0 
#include<stdio.h>
#define N 24
void main()
{
    int iIndex,iCount=0
    for(iIndex = 0;iIndex <= N/3;iIndex++)
    {
        iCount += (N-3*iIndex)/2+1;
    }
    printf("Count is %d",iCount);
}
   

勾股定理用相似三角形证明最合理
2009-11-15 23:46
不屈的生命
Rank: 1
来 自:杭州电子科技大学
等 级:新手上路
帖 子:11
专家分:5
注 册:2009-11-11
收藏
得分:0 
以下是引用hnliji1107在2009-11-2 09:18:09的发言:

#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 !pleas ...
引用二楼的, 只要在此基础上计算排列组合的数值即可.
 排列计算式为: (a+b+c)!/a!/b!/c!, 意思就是去除同长度木头的排列组合.

与众不同; 独树一帜; 求同存异.
2009-11-16 11:10
浴雪希灵
Rank: 2
等 级:论坛游民
帖 子:23
专家分:30
注 册:2009-11-12
收藏
得分:0 
验证我下面写的这个吧,如果去掉一部分代码可以把范围再扩大。
2009-11-16 19:08
快速回复:这道题想了很久,实在不行了,来帮忙看看,给个思路就好
数据加载中...
 
   



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

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