AcWing 1209. 带分数

题目描述:

分析:

题意就是说给定一个整数N,求给定a,b,c,求a+b/c==N且a,b,c恰好包括0-9的答案的个数,需要注意的是,b/c可能得到的是小数,所以要尽量避免除法,将等式转换为乘法格式:a*c+b==N*c.

可以将本题理解为对1-9的全排列进行分段,分为三段,分别对应于a,b,c,至于分段可以对全排列的序列进行插入棍子的方法,利用两根棍子实现序列的分3段。

代码:

#include<bits/stdc++.h>
using namespace std;
int a[9]={1,2,3,4,5,6,7,8,9};
int n,res;
int cal(int x,int y){
	int sum=0;
	for(int i=x;i<=y;i++){
		sum=sum*10+a[i];
	}
	return sum; 
}
void dfs(){
	while(next_permutation(a,a+9)){
		for(int i=0;i<=6;i++){
			for(int j=i+1;j<=7;j++){
				int a=cal(0,i);
				int b=cal(i+1,j);
				int c=cal(j+1,8);
				if(n*c==a*c+b)res++;
			}
		}
	}
}
int main(){
	cin>>n;
	dfs();
	cout<<res<<endl;
	return 0;
}

posted @ 2022-03-15 12:18  回忆、少年  阅读(14)  评论(0编辑  收藏  举报  来源