穷举法——习题
Posted zhai1997
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了穷举法——习题相关的知识,希望对你有一定的参考价值。
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 ",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(); }
运行结果:
典型的穷举法求解的问题:选择语句+循环语句
心胸开阔:不要为令人不快的区区琐事而心烦意乱,悲观失望。 ——富兰克林
以上是关于穷举法——习题的主要内容,如果未能解决你的问题,请参考以下文章