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(); }
運行結果:
典型的窮舉法求解的問題:選擇語句+循環語句
心胸開闊:不要為令人不快的區區瑣事而心煩意亂,悲觀失望。 ——富蘭克林