Nezzar and Lucky Number
题目来源:codeforces
题目
题意:给出一个数d,包含d的十进制数为幸运数,求一个数是否可以等于几个幸运数之和。
分析
第一种情况,所求数小于10*d
当d = 7,时,21 = 3 * 7,所以21 = 7 + 7 + 7,只要在三个7的基础上,任意一个7加10,可得31,41,51,61等都可等于几个幸运数之和。
所以对于一个数,只需判断,其减去一个d的整数倍后得到的数,能否被10整除。例如 31 减去7的整数倍21,得到10,10%10 = 0,所以31可等于几个幸运数的和。
第二种情况,所求数大于等于10*d
当d = 7时,70到79(10d到10d + 9)这十个数都包含幸运7,而后面的数都可在基础上加上幸运数7得到,例如,100 = 79 + 7 + 7 +7,107 = 100 + 7=79 + 7 + 7,可得任何大于等于10*d的数都可以等于几个幸运数之和
AC代码
#include <bits/stdc++.h>
using namespace std;
int q,t,d,a;
int main()
{
cin >> t;
while(t --)
{
cin >> q >> d;
while(q --)
{
cin >> a;
if(a >= 10 *d)//大于等于10*d的情况
{
cout << "YES" << endl;
continue;
}
//小于10*d的情况
int w = 1;//用来判断是否输出过YES
for(int i = 1; i < 10; i ++)
{
int s = a - i * d;
if( s < 0)
break;
else if(s%10 == 0)//满足条件
{
w = 0;//改变w的值
cout << "YES" << endl;
break;
}
}
if(w)
cout << "NO" << endl;
}
}
return 0;
}