P8599 [蓝桥杯 2013 省 B] 带分数
1.题目大意:
题目很简单:给你一个
2.分析:
如果这道题去枚举
我们不如这样想:将
我们以样例为例:对于 823546197。这样,我们去枚举
写代码时,可以选择手打深搜,也可以用一下 next_permutation 这个函数(非常的好用)。
当我们生成一个排列时,只需要枚举两个断点
3.正确代码:
#include<bits/stdc++.h>
using namespace std;
int t,n,a[10]={0,1,2,3,4,5,6,7,8,9},ans;
int main(){
cin>>n;
while(1){
int x=0;
for(int i=1;i<=7;i++){
x=x*10+a[i];
int y=0;
for(int j=i+1;j<=8;j++){//枚举断点
y=y*10+a[j];
int z=0;
for(int k=j+1;k<=9;k++){
z=z*10+a[k];
}
if(y%z==0&&x+y/z==n){//判断是否满足条件
ans++;//满足则答案+1
}
}
}
next_permutation(a+1,a+9+1);
//检查,如果此时的全排列又回到第一次的,则跳出循环
bool ok=0;
for(int i=1;i<=9;i++){
if(a[i]!=i){
ok=1;
break;
}
}
if(!ok) break;
}
cout<<ans;
return 0;
}