C语言穷举法解决破碎的砝码

1.问题描述一天商人不小心把40磅重的砝码摔成4部分,发现4部分砝码的重量都是整磅数,而且可以用它们称出任意1-40之间的整数磅质量,问这四块砝码各重多少磅?2.该问题的数学分析
①必须有1磅的砝码,否则39磅的重量无法称出.

②有了1磅的砝码后,再加上一个3磅的砝码,可称出2~4磅的重量.

③有了1磅和3磅的砝码后,再加上一个9磅的砝码,可称出5~13磅的重量.

④有了1、3、9磅的砝码后,再加上一个27磅的砝码,可称出14~40磅的重量.

所以这4块砝码碎片分别是1、3、9、27磅,即首项为1,公比为3的等比数列.

1 #include <stdio.h>
 2 
 3 int check(int a,int b,int c,int d,int i);
 4 
 5 int main(int argc, char *argv[])
 6 {
 7     int a,b,c,d,i;            //四块砝码重量
 8     for(a=1;a<40;a++)
 9         for(b=a+1;b<40;b++)
10             for(c=b+1;c<40;c++)
11                 for(d=c+1;d<40;d++)
12                     //使用这种循环可以防止重复,比如1234,和4321数字相同,顺序不同 
13                     if( (a+b+c+d) == 40){
14                         int flag=1;            //标志变量 
15                         for(i=1;i<=40;i++){
16                             if(!check(a,b,c,d,i)) flag=0;    //如果有一个i不符合 
17                         }                         
18                         if(flag)            //flag=1说明所有的i都符合 
19                             printf("%d %d %d %d\n",a,b,c,d);    
20                     }
21                     
22     return 0;
23 }
24 
25 //检查四块碎片是否符合条件 
26 int check(int a,int b,int c,int d,int i){
27     int x1,x2,x3,x4;
28         for(x1=-1;x1<=1;x1++)    
29             for(x2=-1;x2<=1;x2++)    
30                 for(x3=-1;x3<=1;x3++)    
31                     for(x4=-1;x4<=1;x4++)
32                         if( (a*x1+b*x2+c*x3+d*x4 == i)) 
33                             return 1;
34                             
35                                     
36         return 0; 
37 }

输出:

1 3 9 27
原文链接: https://www.cnblogs.com/ahaoboy/p/5714242.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/237791

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午5:32
下一篇 2023年2月13日 下午5:32

相关推荐