穷举法——习题

Posted zhai1997

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了穷举法——习题相关的知识,希望对你有一定的参考价值。

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();
}

运行结果:

技术图片

 

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

 

 

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

以上是关于穷举法——习题的主要内容,如果未能解决你的问题,请参考以下文章

《C#零基础入门之百识百例》(十九)穷举法 -- 百钱百鸡

背包问题[穷举法]

穷举法

暴力穷举和回溯法(八皇后问题)

Python穷举法生成手机号

算法习题——选择题