例题7-1 除法 UVa725

1.题目描述:点击打开链接

2.解题思路:本题利用暴力搜索解决。直接从1234开始枚举除数,由于乘积不能超过100000,所以上限是100000/n。然后判断得到的乘积和除数中的所有数是否都各不相同即可。

3.代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<functional>
using namespace std;
bool check(int m, int n)
{
	bool ok = true;
	int vis[10];
	memset(vis, 0, sizeof(vis));
	for (int i = 0; i < 5; i++)
	{
		vis[m % 10]++, vis[n % 10]++;
		if (vis[m % 10]>1 || vis[n % 10] > 1)ok = false;
		m /= 10, n /= 10;
	}
	return ok;
}
int main()
{
	//freopen("t.txt", "r", stdin);
	int n;
	int rnd = 0;
	while (~scanf("%d", &n) && n)
	{
		if (rnd++)cout << endl;
		int ok = 0;
		for (int divisor = 1234; divisor <= 100000/n; divisor++)
		{
			int m = divisor*n;
			if (check(m, divisor))
			{
				ok = 1;
				printf("%05d / %05d = %d\n", m, divisor, n);
			}
		}
		if (!ok)
			printf("There are no solutions for %d.\n", n);
	}
	return 0;
}
时间: 2024-12-30 01:26:13

例题7-1 除法 UVa725的相关文章

noip复习之数学(4)——组合游戏

我们在此专题中将考虑这样一类组合游戏: (1)两个游戏者轮流操作 (2)游戏的状态集有限,并且不管双方怎么走,都不会再出现以前的状态.这保证了游戏在有限步内结束. (3)谁不能操作谁输,这样的规则避免了平局的出现. 而且我们只考虑公平游戏,即如果一个游戏者可以把状态A变为B,另一个游戏者也可以.国际象棋并不是公平游戏,因为白方可以移动白子,而黑方却不能移动白子. 状态图:为方便描述,我们可以把游戏中的状态画成图.每个节点是一个状态,每条边代表从一个状态转移到另一个状态的操作. 注意:先手必胜状态

Uva725 除法

Uva725 除法 题目描述: 输入正整数n,按从小到大的顺序输出所有形如\(abcde/fghij=n\)的表达式,其中\(a-j\)恰好为数字0-9的一个排列(可以有前导0). 思路: 枚举\(fghij\),然后计算出\(abcde\),看所有的数字是否重复.这里主要是要注意判断0-9数字分别出现一次时的效率问题. 代码实现: #include <iostream> #include <map> #include <algorithm> #define LL lo

算法入门经典-第七章 例题7-1 除法

除法输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79. 样例输入: 62 样例输出: 79546/01238=62 94736/01528=62 #include<stdio.h> #include<string.h> int main() { int n; //x/y=n x用abcde表示,若整除n,求出y,而后用fghij表示Y,看是否重复数字 while(~scanf("

7_1 除法(UVa725)&lt;选择合适的枚举对象&gt;

如果把数字0到9分配成2个整数(各五位数),现在请你写一支程序找出所有的配对使得第一个数可以整除第二个数,而且商为N(2<=N<=79),也就是:abcde / fghijk = N这里每个英文字母代表不同的数字,第一个数字可以为0.Input输入包含许多笔待测数据,每列代表一笔待测数据,每笔待测数据包含一个正整数N,N为0时代表输入结束.Output对每笔待测数据由小到大输出每一对符合条件的数.如果找不到符合条件的数对,则输出There are no solutions for N..每笔测

例题10-3 选择与除法 UVa10375

1.题目描述:点击打开链接 2.解题思路:本题让计算两个组合数的商,既可以直接利用公式,也可以利用唯一分解定理:事先计算10000以内的所有素数,然后计算组合数分解后各个素数的幂,用数组e保存指数即可.这里计算指数时可以利用数论中求n!分解式中各个素因数指数的公式. 3.代码: (利用唯一分解定理) #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string>

uva725(除法)

Description Write a program that finds and displays all pairs of 5-digit numbers that between them use the digits 0 through 9 once each, such that the first number divided by the second is equal to an integer N, where . That is, abcde / fghij =N wher

UVA-725除法-Division

分析:  枚举0-9的所有排列?没这个必要,只需要枚举fghij就可以计算出abcde(=fghij * n),然后判断是否所有的数字都不相同即可.不仅程序简单,而且枚举量也从10!=3628800降低至不到1万,而且当abcde的位数不等于5的时候,就可以终止枚举了(记住n是大于等于2的哟!) AC代码如下:用时为1573MS. #include<cstdio> #include<cstring> #include<iostream> #include<cmat

刘汝佳 例题10-3 选择与除法

1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<vector> 5 #include<iostream> 6 using namespace std; 7 8 const int maxn = 10000; 9 vector<int> primes; 10 int e[maxn]; 11 12 /** 13 add_factorial(int n,

有限连分数与欧几里德除法的联系

[有限连分数与欧几里德除法的联系] 1.有理数一定能用连分数来表示. 2.例题一. 3.例题二.