uva 471 - Magic Numbers(枚举技巧)

 Magic Numbers 

Write a program that finds and displays all pairs of integers tex2html_wrap_inline28 and tex2html_wrap_inline30 such that:

  1. neither tex2html_wrap_inline28 nor tex2html_wrap_inline30 have any digits repeated; and
  2. tex2html_wrap_inline36 , where N is a given integer;

Input and Output

The input file consist a integer at the beginning indicating the number of test case followed by  a blank line. Each test case consists of one line of input containing N. Two input are separated by a blank line.

For each input the output consists of a sequence of zero or more lines each containing tex2html_wrap_inline28 / tex2html_wrap_inline30 = N, where tex2html_wrap_inline48 and N are the integers described above. When there are two or more solutions, sort them by increasing numerator values. Two consecutive output set will separated by a blank line. 

Sample Input

1

1234567890

Sample Output

1234567890 / 1 = 1234567890
2469135780 / 2 = 1234567890
4938271560 / 4 = 1234567890
6172839450 / 5 = 1234567890
8641975230 / 7 = 1234567890
9876543120 / 8 = 1234567890

题意: 给一个n,求出有几种s1 / s2方式去得到他,并且s1,s2必须不能有重复的数字。

思路: 感觉这题题目不清不楚啊。没有n的范围啊。如果n很小那么情况会是非常多的肯定就超时了。。说明没有这样的数字,N应该都是很大的。所以去枚举到9876543210就结束了。然后去判断有没有重复的数字。

代码:

#include <stdio.h>
#include <string.h>
const long long MAXN = 9876543210;
int T, vis[10];
long long n, num;

bool check(long long num) {
    memset(vis, 0, sizeof(vis));
    while (num) {
	if (vis[num % 10]) return false;
	vis[num % 10]++;
	num /= 10;
    }
    return true;
}

int main() {
    scanf("%d", &T);
    while (T--) {
	scanf("%lld", &n);
	for (long long i = 1; i <= MAXN; i ++) {
	    num = n * i;
	    if (num > MAXN) break;
	    if (check(num) && check(i))
		printf("%lld / %lld = %lld\n", num, i, n);
	}
	if (T) printf("\n");
    }
    return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值