您的位置:首页 > 其它

UVA - 10396 Vampire Numbers

2015-06-08 19:09 344 查看
题目大意:输入n,找出为数为n的吸血鬼数字。吸血鬼数字即偶数,并且可以拆分成两个不同为10的倍数的数,相乘为它本身。

解题思路:枚举拆分后的两个数,然后判断。

#include <cstdio>
#include <set>
using namespace std;

set <int> ans[10];

bool judge(int a, int b, int num, int M) {
int A[10] = {0};
for (int i = 0; i < num; i++) {
A[a % 10]++;
A[b % 10]++;
a /= 10;
b /= 10;

A[M % 10]--;
M /= 10;
A[M % 10]--;
M /= 10;
}

for (int i = 0; i < 10; i++)
if (A[i])
return false;

return true;
}

int main() {

for (int i = 10; i < 100; i++)
for (int j = i; j < 100; j++)
if (i * j > 999 && (i % 10 || j % 10) && i * j % 2 == 0 &&judge(i, j, 4 / 2, i * j))
ans[4].insert(i * j);

for (int i = 100; i < 1000; i++)
for (int j = i; j < 1000; j++)
if (i * j > 99999 && (i % 10 || j % 10) && i * j % 2 == 0 &&judge(i, j, 6 / 2, i * j))
ans[6].insert(i * j);

for (int i = 1000; i < 10000; i++)
for (int j = i; j < 10000; j++)
if (i * j > 9999999 && (i % 10 || j % 10) && i * j % 2 == 0 &&judge(i, j, 8 / 2, i * j))
ans[8].insert(i * j);

int n;
while (scanf("%d", &n) != EOF) {
for (set <int>::iterator it = ans
.begin(); it != ans
.end(); it++)
printf("%d\n", *it);
printf("\n");

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: