AcWing 1209. 带分数

Problem: AcWing 1209. 带分数

文章目录

思路

这是一个全排列+枚举的问题。我们需要找到所有的1-9的全排列,然后在每个全排列中枚举所有可能的分数形式,检查是否满足给定的条件。

解题方法

我们首先使用深度优先搜索(DFS)来生成1-9的所有全排列。然后,对于每个全排列,我们枚举所有可能的分数形式。具体来说,我们枚举所有可能的分子和分母的位置,然后检查是否满足给定的条件。

复杂度

时间复杂度:

O ( n ! ) O(n!) O(n!),其中n是数字的数量。这是因为我们需要生成所有的全排列。

空间复杂度:
O ( n ) O(n) O(n),其中n是数字的数量。这是因为我们需要存储每个全排列。

Code

java 复制代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class Main {
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	static StreamTokenizer sr = new StreamTokenizer(in);
	static int n = 9, m;
	static int MAXN = 10;
	static int[] arr = new int[MAXN];
	static boolean[] vis = new boolean[MAXN];
	static int ans = 0;
	public static void main(String[] args) throws IOException {
		m = nextInt();
		// 全排列枚举所有情况
		dfs(1);
		out.println(ans);
		out.flush();
	}

	private static void dfs(int u) {
		// TODO Auto-generated method stub
		if (u > n) {
			StringBuffer sb = new StringBuffer();
			for (int i = 1; i <= n; i++) {
				sb.append(arr[i]);
			}
			// 进行隔板枚举
			String s = sb.toString();
			for(int i = 1; i <= 7; i++) {
				for(int j = i + 1; j <= 8; j++) {
					int a = Integer.parseInt(s.substring(0, i));
					int b = Integer.parseInt(s.substring(i, j));
					int c = Integer.parseInt(s.substring(j));
					if(m * c == a * c + b) {
						ans++;
					}
				}
			}
			return;
		}
		for (int i = 1; i <= n; i++) {
			if(!vis[i]) {
				vis[i] = true;
				arr[u] = i;
				dfs(u + 1);
				arr[u] = 0;
				vis[i] = false;
			}
		}
	}

	static int nextInt() throws IOException {
		sr.nextToken();
		return (int) sr.nval;
	}

}
相关推荐
A923A1 天前
【洛谷刷题 | 第五天】
算法·字符串·递归·洛谷
_小草鱼_2 天前
【搜索与图论】DFS算法(深度优先搜索)
算法·深度优先·图论·回溯·递归
百锦再3 天前
树形数据展示:树形表格与树形控件的深度对比(Vue实现)
javascript·vue.js·ecmascript·递归·tree·data·table
少许极端7 天前
算法奇妙屋(三十一)-递归、回溯与剪枝的综合问题 4
算法·剪枝·回溯·递归
xiaoye-duck7 天前
《算法题讲解指南:递归,搜索与回溯算法--二叉树中的深搜》--10.二叉搜索树中第k小的元素,11.二叉树的所有路径
c++·算法·深度优先·递归
xiaoye-duck7 天前
《算法题讲解指南:递归,搜索与回溯算法--二叉树中的深搜》--8.二叉树剪枝,9.验证二叉搜索树
c++·算法·深度优先·递归
xiaoye-duck8 天前
《算法题讲解指南:递归,搜索与回溯算法--递归》--3.反转链表,4.两两交换链表中的节点,5.快速幂
数据结构·c++·算法·递归
xiaoye-duck8 天前
《算法题讲解指南:递归,搜索与回溯算法--二叉树中的深搜》--6.计算布尔二叉树的值,7.求根节点到叶节点数字之和
c++·算法·深度优先·递归
礼拜天没时间.11 天前
力扣热题100实战 | 第25期:K个一组翻转链表——从两两交换到K路翻转的进阶之路
java·算法·leetcode·链表·递归·链表反转·k个一组翻转链表
程序员-King.11 天前
day162—递归—买卖股票的最佳时机Ⅱ(LeetCode-122)
算法·leetcode·深度优先·递归