链接:
https://www.nowcoder.com/acm/contest/67/I
来源:牛客网
来源:牛客网
找数字个数
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
lulu喜欢小于等于1000的正整数,但是如果某个数是a或b的倍数,lulu会讨厌这个数。如果某个数里包含了a和b两个数里包含的数,lulu也会讨厌。(例如a=14,b=23,如果数字中包含1、2、3、4这四个数中的任意一个数,lulu就会讨厌这个数)。现在告诉你a,b,你能说出lulu喜欢的数有多少个么。
输入描述:
第一行是样例数T 第2到2+T-1行每行有2个整数a b。
输出描述:
输出lulu喜欢的数的个数
示例1输入
3 2 3 14 23 1234 5678输出
171 190 7说明
a=1234 b=5678的时候,只考虑含有数字9,0的数,只有7个,分别是9,99,999,90,990,909,900备注:
对于100%的数据, 0 < T <= 20; 0 <= a <= 99999; 0 <= b <= 99999。#include<iostream> #include<algorithm> #include<cstring> using namespace std; int ans = 0; bool pr[1003]; void search(int n) { for (int i = n; i <= 1000; i += n) { if (pr[i]) { pr[i] = false; ++ans; } } } void find(int n) { for (int i = 1; i <= 1000; ++i) { if (pr[i]) { int node = i; int v = 0; while (node) { if (node % 10 == n) { v = 1; break; } node /= 10; } if (v) { ++ans; pr[i] = false; } } } } int main() { int flag; while (cin >> flag) { while (flag--) { int n, m; while (cin >> n >> m) { int nn[10]; memset(nn, 0, sizeof(nn)); memset(pr, true, sizeof(pr)); ans = 0; search(n); search(m); int node = n; while (node) { ++nn[node % 10]; node /= 10; } node = m; while (node) { ++nn[node % 10]; node /= 10; } for (int j = 0; j < 10; ++j) { if (nn[j] != 0) find(j); } cout <<1000-ans<<endl; } } } return 0; }