蓝桥2013·带分数

题目链接: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;
}


posted @ 2025-02-23 09:57  Marinaco  阅读(17)  评论(0)    收藏  举报
//雪花飘落效果