| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 359 人关注过本帖
标题:求高手~这种类型的该怎么解决
只看楼主 加入收藏
bccn_0934
Rank: 2
等 级:论坛游民
帖 子:35
专家分:56
注 册:2011-5-9
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:5 
求高手~这种类型的该怎么解决
/*4、一个重40磅的砝码,摔成了四块,且都是整磅数,而且用这四块碎片可以在天平上
称1至40磅之间的任意重量。求这四块碎片各重多少?*/  有谁会的啊?
#include "stdio.h"
#include "algorithm"
main()
{using namespace std;
int test[4],i;
int flag=1;
for(test[0]=1;test[0]<40;test[0]++)
for(test[1]=1;test[1]<40;test[1]++)
for(test[2]=1;test[2]<40;test[2]++)
for(test[3]=1;test[3]<40;test[3]++)
do{
    for(int i=1;i<=40;i++)
    if((test[0]+test[2]+test[1]+test[3]==40)&&(test[0]==i||test[1]==i||test[2]==i||test[3]==i
        ||test[0]+test[1]-test[3]==i||test[0]+test[1]-test[2]==i||test[1]+test[2]-test[0]==i||test[1]+test[2]-test[3]==i||test[1]+test[3]-test[2]==i||test[1]+test[3]-test[0]==i||test[0]+test[3]-test[1]==i||test[0]+test[3]-test[2]==i
        ||test[0]+test[1]-(test[3]+test[2])==i||test[3]+test[2]-(test[0]+test[1])==i||test[0]+test[3]-(test[1]+test[2])==i||test[2]+test[1]-(test[0]+test[3])==i
        ||test[0]+test[1]+test[2]-test[3]==i||test[0]+test[1]+test[3]-test[2]==i||test[1]+test[2]+test[3]-test[0]==i||test[0]+test[2]+test[3]-test[1]==i))
    要等到if里面运行i从1到40 才输出      怎么写啊???
       printf("%d %d %d %d \n",test[0],test[1],test[2],test[3]);
}while(flag==next_permutation(test,test+4));

}

[ 本帖最后由 bccn_0934 于 2011-7-8 21:13 编辑 ]
搜索更多相关主题的帖子: include 
2011-07-08 21:11
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
菜鸟飞过~~~~~~~

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-07-08 21:49
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:20 
题目中给出的条件是“在天平上”,这意味着:同一砝码既可以放在天平的左侧,也可以放在天平的右侧。若规定重物只能放在天平的左侧,则当天平平衡时有:
            重物重量+左侧砝码重量总和=右侧砝码重量总和
 由此可得:
            重物重量=右侧砝码重量总和-左侧砝码重量总和
    编程时只要根据以上公式,使“右侧砝码重量总和-左侧砝码重量总和”可以表示1到40之间的全部重量即可。编程中要注意的是:怎样采用一种简单的方法来表示一个砝码是在天平的左侧还是在天平的右侧,或是根本没有使用。
    以下程序采用1、 -1和0分别表示上述三种情况,请注意理解。
程序代码:
#include<stdio.h>
#include<math.h>
void main()
{
   int weight1,weight2,weight3,weight4,d1,d2,d3,d4,x,flag;     /*flag:满足题意的标记*/
   printf("The weight is broke up as following 4 pieces:");
   for (weight1=1;weight1<=40;weight1++)         /*将40分解成4份*/
      for (weight2=weight1+1;weight2<=40-weight1;weight2++)
         for (weight3=weight2+1;weight3<=40-weight1-weight2;weight3++)
           if ((weight4=40-weight1-weight2-weight3)>=weight3)
           {
               for (flag=1,x=1;x<41&&flag;x++)     /*判断可否称出1~40之间的全部重量*/
                  for (flag=0,d1=1;d1>-2;d1--)     /*将重物放在天平的左边*/
                     for (d2=1;d2>-2&&!flag;d2--)   /*1:砝码在天平右边*/
                        for (d3=1;d3>-2&&!flag;d3--)    /*0:不用该砝码*/
                           for (d4=1;d4>-2&&!flag;d4--)    /*-1:砝码在天平的左边*/
                              if (x==weight1*d1+weight2*d2+weight3*d3+weight4*d4)
                                 flag=1;
                  if (flag)

                      printf("%d %d %d %d\n",weight1,weight2,weight3,weight4);
                  flag=0;

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


冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-07-08 22:00
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
40进制  加全排列  可以不

对每个40进制数 全排列 进行检查能否满足条件

不过40进制我不太会写,全排列可以用STL的

坐等高手

                                         
===========深入<----------------->浅出============
2011-07-08 22:00
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
有点思路了  生成时可以用40进制  判断是否满足 可以不用全排列

 直接用三进制就可以了  谢谢二楼的提示 效率提高了不少

                                         
===========深入<----------------->浅出============
2011-07-08 22:07
tyyz9565
Rank: 1
等 级:新手上路
帖 子:14
专家分:7
注 册:2009-9-10
收藏
得分:0 
俺是菜鸟,一点也看不懂
2011-07-09 13:39
快速回复:求高手~这种类型的该怎么解决
数据加载中...
 
   



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

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