题目意思
解题思路
首先介绍一个排列组合的一个函数next_permutation(),用这个函数可以直接算排列组合。
数位分离:给你一串数字,我们将这个数串去不断地%10,/10去将其分离开。
这道题我们算出1~9的所有排列组合数,然后去将不同的排列组合数按照题意分离判断能不能得到结果和n相同。
直接看代码吧!
代码部分
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <math.h>
#include <map>
using namespace std;
int main()
{
int n,a,b,res,t,sum;
scanf("%d",&n);
int ans=0;
int num[9]={1,2,3,4,5,6,7,8,9};
do
{
res=0;
for(int i=0; i<9; i++)
{
sum=0;t=1;
res=res*10+num[i];//res表示加号前边的那个整数+
for(int j=i+1; j<9; j++)
{
sum=sum*10+num[j];//sum表示除前边整数外剩余的所有的数
}
for(int j=0; j<(9-i)/2; j++)
{
t*=10;
b=sum%t;//b表示分母
a=sum/t;//a表示分子
if(res+a/b==n&&a%b==0)
{
ans++;
}
}
}
}while(next_permutation(num,num+9));//1~9的排列组合函数
cout<<ans<<endl;
return 0;
}