• 穷举法——习题


    1、求解一个数组的逆序对个数:

    int Reverse(int a[],int n){
        int i,j,count;
        for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
        if(a[i]<a[j]) 
        count++;
        return count; 
    } 

    2、有一群鸡和一群兔,它们的只数相同,脚的个数都是三位数,且这两个三位数的数字分别为0、1、2、3、4、5。用穷举法求鸡和兔的个数各是多少?它们的脚数各是多少?

    void chickenAndRabbit(){
       int a,b,c,d,e,f,chicken,rabbit;
       for(a=2;a<=6;a++)
        for(b=1;b<=6;b++)
         for(c=1;c<=6;c++)
         
          for(d=2;d<=6;d++)
           for(e=1;e<=6;e++){
               f=21-a-b-c-d-e;
               if(a*b*c*d*e*f==720){
                  chicken=(a*100+b*10+c-111)/2;
                  rabbit=(d*100+e*10+f-111)/4;
                  
                  if(chicken==rabbit){
                  printf("%d
    ",chicken);
                  printf("%d",rabbit);
                  }
                 
                  }
           }
    }

    因为如果数列中含有数字零的话,乘积只会是零,因此要把所有的数字加一,相当于把所有的三位数的每一位加一,也就是说加了111,所以要减去。

    3、有一个三位数字,个位数比百位数大,百位数字又比十位数字大,且各位数字之和等于 各位数字相乘之积。

    #include<stdio.h>
    void num(){
          int ge,shi,bai;
          for(shi=0;shi<=7;shi++)
           for(bai=shi+1;bai<=8;bai++)
            for(ge=bai+1;ge<=9;ge++)
              if((ge+shi+bai)==ge*shi*bai){
               int num=bai*100+shi*10+ge;
               printf("%d",num);    
              }
    } 
    int main(){
        num();
    }

    运行结果:

     典型的穷举法求解的问题:选择语句+循环语句

    心胸开阔:不要为令人不快的区区琐事而心烦意乱,悲观失望。           ——富兰克林

    每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛
  • 相关阅读:
    HTML-DOM实例——实现带样式的表单验证
    HTML-DOM常用对象的用法(select/option/form/table)
    class介绍
    let 和const命令
    页面滚动事件和利用JS实现回到顶部效果
    DOM的利用冒泡做的一个小程序
    BOM的对象总结(location,screen,navigator,history)
    IE下的双外边距浮动bug
    全国计算机三级网络工程技术复习笔记2
    全国计算机三级网络工程技术复习笔记1
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12077625.html
Copyright © 2020-2023  润新知