| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1394 人关注过本帖
标题:有空的都来看看这个题目应该设计什么样的算法?
只看楼主 加入收藏
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
收藏
得分:0 
回复 24楼 有容就大
答案就是这个。
但我没做出来,我同学做出来了,他说这个答案是正确的。我正在看这方面的算法,到时候也试试写看。
2012-02-29 22:43
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
收藏
得分:0 
回复 25楼 回首依依
有这样的数存在的……
2012-02-29 22:44
陈ren
Rank: 2
等 级:论坛游民
帖 子:42
专家分:33
注 册:2012-2-29
收藏
得分:2 
对啊。。用隔板法想想结果。
程序可以用几重IF来实现。

老师说:死记硬背是一种很靠智商的方法,重要的还是努力
2012-02-29 22:56
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:0 
杨大哥,容大哥,我贴了一个烂码,别喷我额。。。觉得好玩额。。。
运行结果是
    1   2   3   5  12
    1   2   3   6  11
    1   2   3   7  10
    1   2   4   5  11
    1   2   4   6  10
    1   2   4   7   9

#include<stdio.h>
void judge(int,int,int,int,int);
int main(void)
{
int x1,x2,x3,x4,x5;
for(x1=1;x1<=23;x1++)
for(x2=1;x2<=23;x2++)
for(x3=1;x3<=23;x3++)
for(x4=1;x4<=23;x4++)
for(x5=1;x5<=23;x5++)
{
if(x1+x2+x3+x4+x5==23)
if(x1<x2&&x2<x3&&x3<x4&&x4<x5)
judge(x1,x2,x3,x4,x5);
}
return 0;
}

void judge(int x1,int x2,int x3,int x4,int x5)
{
int a,b,c,d,e,i,f,sum=0;
int p[24]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
for(d=0;d<=1;d++)
for(e=0;e<=1;e++)
{
f=a*x1+b*x2+c*x3+d*x4+e*x5;
switch (f)
{
case 0:p[0]=1;break;
case 1:p[1]=1;break;
case 2:p[2]=1;break;
case 3:p[3]=1;break;
case 4:p[4]=1;break;
case 5:p[5]=1;break;
case 6:p[6]=1;break;
case 7:p[7]=1;break;
case 8:p[8]=1;break;
case 9:p[9]=1;break;
case 10:p[10]=1;break;
case 11:p[11]=1;break;
case 12:p[12]=1;break;
case 13:p[13]=1;break;
case 14:p[14]=1;break;
case 15:p[15]=1;break;
case 16:p[16]=1;break;
case 17:p[17]=1;break;
case 18:p[18]=1;break;
case 19:p[19]=1;break;
case 20:p[20]=1;break;
case 21:p[21]=1;break;
case 22:p[22]=1;break;
case 23:p[23]=1;break;
}
}
for(i=0;i<=23;i++)
sum+=p[i];
if(sum==24)
printf("%d\t%d\t%d\t%d\t%d\n",x1,x2,x3,x4,x5);
}

[ 本帖最后由 zxd675816777 于 2012-3-1 00:20 编辑 ]

数学好难!
2012-03-01 00:15
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:0 
我写的这个已经不能叫算法了,额,我自己都觉得很那啥,不过提供楼主一种简单的思路额,基本都是枚举硬算的。当然,还需要多跟杨大哥们学习额。。。

数学好难!
2012-03-01 00:21
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 35楼 zxd675816777
一个不是最好的方法总比没有方法好。按你的思路修改了代码,你可以借鉴一下。
这种算法的优点是简单,容易实现。缺点是解决问题的范围很窄,难于扩展。如果将问题扩展到N个数,需要对代码进行大量的修改。

程序代码:
#include<stdio.h>
int judge(int * x)
{
    int p[24] = {0}, i, j, c;//p是一个标志数组,用来标记某位是否计算到
    for(i = 1; i < (1 << 5); i++)
    {
        c = 0;
        for(j = 0; j < 5; j++)
            if(i & (1 << j)) c += x[j];
        p[c] = 1;
    }
    for(i = 1; i <= 23; i++)
        if(p[i] == 0) return 0;
    return 1;
}

int main()
{
    int x[5];
    for(x[0] = 1; x[0] <= 23; x[0]++)
    for(x[1] = x[0] + 1; x[1] <= 23; x[1]++)
    for(x[2] = x[1] + 1; x[2] <= 23; x[2]++)
    for(x[3] = x[2] + 1; x[3] <= 23; x[3]++)
    {
        x[4] = 23 - x[0] - x[1] - x[2] - x[3];
        if(x[4] > x[3] && judge(x)) printf("%d %d %d %d %d\n", x[0], x[1], x[2], x[3], x[4]);
    }
    return 0;
}

重剑无锋,大巧不工
2012-03-01 01:24
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:0 
回复 36楼 beyondyf
嗯呢,谢谢杨大哥哈,早点儿休息咯。我也睡去了,明早还要上大物实验额。。。晕

数学好难!
2012-03-01 01:47
快速回复:有空的都来看看这个题目应该设计什么样的算法?
数据加载中...
 
   



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

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