题目链接:AcWing 1209. 带分数
100 可以表示为带分数的形式:100=3+69258/714
还可以表示为:100=82+3546/197
注意特征:带分数中,数字 1∼9
分别出现且只出现一次(不包含 0)。
类似这样的带分数,100有 11种表示法。
输入格式
一个正整数。
输出格式
输出输入数字用数码 1∼9
不重复不遗漏地组成带分数表示的全部种数。
数据范围
1≤N<106
输入样例1:
100
输出样例1:
11
输入样例2:
105
输出样例2:
6
程序说明:
先求出1~9的全排列,然后划分成三段(隔板法),判断每段是否满足要求。
代码如下:
#include <iostream>
using namespace std;
int a[10], st[10], n, res;
int cal(int l, int r) {
int t = 0;
for(int i = l; i <= r; i++)
t = t * 10 + a[i];
return t;
}
void dfs(int k) {
if(k == 9) {
for(int i = 0; i < 7; i++) {
for(int j = i + 1; j < 8; j++) {
int a = cal(0, i);
int b = cal(i + 1, j);
int c = cal(j + 1, 8);
if(c * n == c * a + b)
res++;
}
}
return;
}
for(int i = 1; i <= 9; i++) {
if(!st[i]) {
st[i] = 1;
a[k] = i;
dfs(k + 1);
st[i] = 0;
}
}
}
int main() {
cin>>n;
dfs(0);
cout<<res;
return 0;
}
共有条评论 网友评论