注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。
题目分析:
典型的可以通过递归来做的题目,5个数表示了递归的层数;
我们从第一个数开始进行递归,对第一个数a遍历所有可能取到的值,然后进行下一层递归;
对第二个数b遍历所有可能取到的值,然后对这些值进行判断是否符合条件(对b和a的关系进行判断),如果不符合条件则停止递归,如果符合条件则进入下一层递归;
……
直到进入了第五层递归,如果e的值也符合条件,则对abcde进行判断,看时候符合条件ab * cde = adb * ce,符合条件则计数器加1.
#include输出结果为142;using namespace std;int num=0;bool check(int *a,int n){ for(int i=n-1;i>=0;i--) if(a[i]==a[n])return false; return true;}void next(int *a,int n){ int num1=a[0]*10+a[1]; int num2=a[2]*100+a[3]*10+a[4]; int num3=a[0]*100+a[3]*10+a[1]; int num4=a[2]*10+a[4]; if(num1*num2==num3*num4) num++;}void fun(int *a,int n){ if(n==5)next(a,5); else { for(int i=1;i<10;i++) { a[n] = i; if(check(a,n)) fun(a,n+1); } }}int main(){ int a[5]; fun(a,0); cout< <
评价:这个题目是典型的通过递归方法来做的题目,多练习几道这类题目,掌握其一般形式和规律。