• 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
    ",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

  • 相关阅读:
    centos升级glibc(升级到 2.17版)
    访问zabbix首页无法正常登陆
    解决zbx的web界面zabbix服务器端运行中 显示为不(启动命令)
    4. 日期
    3. 页面滚动条位置恢复
    2. 添加版本号
    1. webpack 复制文件
    4. git log的常见用法
    3. git获取历史版本
    2. Git-命令行-删除本地和远程分支
  • 原文地址:https://www.cnblogs.com/ahaoboy/p/5714242.html
Copyright © 2020-2023  润新知