首页 > 其他 > 详细

穷举法——习题

时间:2019-12-21 18:24:15      阅读:208      评论:0      收藏:0      [点我收藏+]

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

运行结果:

技术分享图片

 

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

 

 

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

穷举法——习题

原文:https://www.cnblogs.com/zhai1997/p/12077625.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!