AcWing 1209. 带分数
原题链接
简单
作者:
fchunwww
,
2019-12-02 11:04:44
,
所有人可见
,
阅读 3728
C++ 代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10;
int s[N];//记录每一种组合方式
bool vis[N];//记录是否被用过
int ans; //记录答案
int n;
int cal(int l, int r)//[l,r]为s数组的左右区间
{
int res = 0;
for (int i = l; i <= r; i++)
res = res * 10 + s[i];
return res;
}
bool check(int a, int b, int c)//判断所选的数是否满足条件
{
return (b % c == 0) && (a + b / c == n);
}
void dfs(int u)
{
if (u == 9)
{
//拆分每一种组合方式 拆成 整数+分数的形式
for (int i = 0; i < 8; 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 (check(a, b, c)) ans++;
// {
// cout << endl;
// cout << a << " " << b << " " << c << endl;
// ans++;
// cout << ans;
// }
}
}
return;
}
for (int i = 1; i < 10; i++)
{
if (!vis[i])
{
s[u] = i;
vis[i] = true;
dfs(u + 1);
s[u] = 0;
vis[i] = false; //恢复现场
}
}
}
int main()
{
scanf("%d", &n);
dfs(0);
printf("%d", ans);
return 0;
}
思路很清晰,将代码模块化非常有条理,就是有一点,我拙见认为是不是要把check里面的换成ac+b==nc
是的,并没有要求一定要整除,假分数也是可以的
通俗易懂,思路清晰 一看就会了
orz
为什么是b%c==0啊 不是分数吗 应该不等于0吧
如果后面那个是分数的话整数加一个分数就不可能是一个整数了鸭
嗷嗷嗷 谢谢你哦
不客气哈哈~
666
%%%