UVA471 Magic Numbers 题解
1.题目
题意很简单:输入n,枚举所有的a,b,使得 (1)满足a/b=n。 (2)满足a,b各个位上的数字不相同。
2.思路
(1)对于被除数,要满足各个位上的数字,显然最大枚举到987654321就可以。 (2)对于被除数,要枚举n的整数倍以减少枚举次数。
3.代码及实现
分析完这些,这个题的代码就自然而然很简单了,但是要注意 “相邻两组数据之间输出一行空行”
#include<bits/stdc++.h> using namespace std; long long m; int t, check[10]; bool check_same(long long n){ memset(check, 0, sizeof(check)); while(n){ long long tem = n % 10; //拆位判重都会吧 check[tem] ++; //写成函数都会吧 if(check[tem] > 1) return 0; else n /= 10; } return 1; } int main() { cin >> t; bool k = 1; while(t --){ if(! k) cout << endl; //相邻两组数据之间输出一行空行???奇奇怪怪 k = 0; cin >> m; for(long long i = m; i <= 9876543210; i += m) //直接暴力枚举m的整数倍 if(check_same(i) && check_same(i / m)) cout << i << " / " << i / m << " = " << m << endl; //输出麻烦时喜欢用cout } return 0; }