列表

详情


NC14976. 找数字个数

描述

    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

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 400K, 提交时间: 2019-11-11 09:50:18

#include<bits/stdc++.h>
using namespace std;
int t,a,b,sum;
bool v[1010];
void js(int x){
	while(x){
		v[x%10]=1;
		x/=10;
	}
}
bool vn(int x){
	while(x){
		if(v[x%10])return 0;
		x/=10;
	}
	return 1;
}
int main(){
	cin>>t;
	while(t--){
		memset(v,0,sizeof v);
		sum=0;
		cin>>a>>b;
		js(a),js(b);
		for(int i=1;i<=1000;i++)
			if(i%a!=0&&i%b!=0&&vn(i))
				sum++;
		cout<<sum<<endl;
	}
	return 0;
}

pypy3 解法, 执行用时: 147ms, 内存消耗: 26612K, 提交时间: 2022-03-23 20:58:58

for z in range(int(input())):
    a,b= map(int,input().split())
    c= list(str(a))+list(str(b))
    t= 0
    for i in range(1,1001):
        if i%a==0 or i%b==0:
            t+=1
        else:
            for _ in c:
                if _ in str(i) :
                    t+=1
                    break
    print(1000-t)

Python3(3.5.2) 解法, 执行用时: 89ms, 内存消耗: 3432K, 提交时间: 2018-01-21 14:35:19

T=int(input())
for i in range(T):
	ans=0
	nums=input().split()
	a=nums[0];b=nums[1]
	N=set(a)|set(b)
	for j in range(1,1001):
		flag=1
		for k in N:
			if k in str(j) or j%int(a)==0 or j%int(b)==0:
				flag=0
				break
		ans+=flag
	print(ans)

Python(2.7.3) 解法, 执行用时: 90ms, 内存消耗: 5740K, 提交时间: 2018-01-21 14:49:33

for _ in xrange(input()):
    a, b = map(int, raw_input().split())
    print len([n for n in xrange(1, 1001) if not ((not (n % a and n % b)) or set(str(n)) & (set(str(a)) | set(str(b))))])

上一题