题目链接:https://www.luogu.com.cn/problem/P8599
题意:给定n,求其有多少种带分数表达形式(即a+ b/c = n)(其中a,b,c这些数字在1~9中只出现一次)
思路:
枚举全排列,再枚举i,j,表示0~i范围数字是a,i+1~j范围数字是b,j+1~8范围数字是c
check一下,注意不仅要满足 a+b/c = n,还要满足 b%c = 0,这是因为系统自动向下取整分块
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define pb push_back
#define endl "\n"
#define fi first
#define se second
//#pragma GCC optimize(3)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int inf=0x3f3f3f3f;
const ll llmax=LLONG_MAX;
const int maxn=1e5+5;
const int mod=1e9+7;
int n;
int book[]={1,2,3,4,5,6,7,8,9};
int Tonum(int l,int r){int res=0;for(int i=l;i<=r;i++){res=res*10+book[i];}return res;
}
bool check(int a,int b,int c){if(a+(b/c)==n&&b%c==0)return true;return false;
}
signed main()
{ios::sync_with_stdio(false),cin.tie(0);cin>>n;int cnt=0;do{for(int i=0;i<=8;i++){for(int j=i+1;j<=7;j++){int a=Tonum(0,i);int b=Tonum(i+1,j);int c=Tonum(j+1,8);if(check(a,b,c)){cnt++;} }}}while(next_permutation(book,book+9));cout<<cnt;return 0;
}