码迷,mamicode.com
首页 > 其他好文 > 详细

穷举法——习题

时间:2019-12-21 18:31:48      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:nan   rabbit   img   nbsp   逆序对   bsp   循环语句   就是   ++   

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

运行结果:

技术图片

 

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

 

 

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

穷举法——习题

标签:nan   rabbit   img   nbsp   逆序对   bsp   循环语句   就是   ++   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!