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;
}