穷举法——习题

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\n",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();
}

运行结果:

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

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

猜你喜欢

转载自www.cnblogs.com/zhai1997/p/12077625.html
今日推荐