1209.带分数

题目连接

思路

由1 - 9组成带分数,因为每个数只能出现一次,所以就枚举出1 - 9的全排列,然后把它分为三个部分,用双重循环考虑所有情况,最后算出结果即可。

代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
int ans[N]; //记录全排列结果 
bool f[N]; 
int n, res = 0;
void dfs(int u)
{
	//如果到了第十个数,就可以开始计算,并返回 
	if (u > 9)
	{
//		for (int i = 1; i <= 9; i ++ )
//		{
//			cout << ans[i] << " ";
//		}
//		cout << endl;
		
		//枚举整数部分的位数 
		for (int i = 1; i <= 7; i ++ )
		{
			//枚举分子部分的位数 
			for (int j = 1; j <= 8 - i; j ++ )
			{
				//算出分子的位数 
				int k = 9 - i - j;
				
				//记录每一部分的数值 
				int a = 0, b = 0, c = 0;
				
				//算出整数部分 
				for (int f = 1; f <= i; f ++ )
				{
					a = a * 10 + ans[f];
				}
				
				//算出分子部分 
				for (int f = i + 1; f <= i + j; f ++ )
				{
					b = b * 10 + ans[f];
				}
				
				//算出分母部分 
				for (int f = i + j + 1; f <= 9; f ++ )
				{
					c = c * 10 + ans[f];
				}
//				cout << a << " " << b << " " << c << endl;
				if (b % c == 0 && a + b / c == n)
				{
					res ++;
				}
			}
		}
	}
	
	//枚举9个数 
	for (int i = 1; i <= 9; i ++ )
	{
		//如果当前数没被选过 
		if (!f[i])
		{
			f[i] = 1; //标记为选过 
			ans[u] = i; //记录该数 
			dfs(u + 1); //进入下一个位置 
			f[i] = 0; //标记为未选过  
		}
	}
}
int main()
{
	cin >> n;
	dfs(1);
	cout << res;
	return 0;
}

总结

不是很难

相关推荐
the3clipse9 小时前
H.265熵编码核心:CABAC自适应二进制算术编码详解——如何将语法元素高效压缩为比特流
人工智能·算法·视频编码·h.265·hevc·cabac·cavlc
CQU_JIAKE9 小时前
10.4【A】
算法
Godspeed Zhao9 小时前
现代智能雷达技术19——算法(5)
算法
(Charon)9 小时前
【C++面试】RAII到底是什么:从资源管理理解C++对象生命周期
c++·算法·面试
Omics Pro9 小时前
之江实验室NAR|虚拟细胞3阶段训练范式
数据库·人工智能·算法·机器学习·自然语言处理
Tisfy9 小时前
LeetCode 0678.有效的括号字符串:O(n)+O(1)一次遍历
算法·leetcode·字符串·题解·贪心·括号匹配
小O的算法实验室10 小时前
IEEE TEVC,学习辅助的搜索路径重构进化算法
学习·算法·重构
Liuchang091110 小时前
洛谷 P2670 [NOIP 2015 普及组] 扫雷游戏
c++·算法·游戏
言乐610 小时前
Python体现逻辑回归和决策树的区别
开发语言·python·算法·决策树·逻辑回归
HugoStudio_SWAN10 小时前
洛谷 B4575 [GESP202609 二级] 直角三角形——临场定义理解与边界质疑
c++·学习·程序人生·算法