窮舉法——習題


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

運行結果:

 

 典型的窮舉法求解的問題:選擇語句+循環語句

 

 

心胸開闊:不要為令人不快的區區瑣事而心煩意亂,悲觀失望。           ——富蘭克林


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM