题意如上,n代表kk喜欢的数中的第n个数,该题由于数据范围不大,仅为1000,因此我们可以使用暴力求解。也就是对于每一次查询,都从1开始进行for循环,对于每个数判断它是否能够整除3或者最后一位是否为3,如果满足任意一个条件,都说明该数不为喜欢的数,直到找到第n个为止。其实类比推理可发现第10个喜欢的数是16,第100个数是166,第1000个是1666,也就是说其实循环到1666也就可以结束了,因为第1000个为1666。因此可以用暴力求解,代码如下。
ps:但还是推荐使用打表求解,打表求解方法请跳转到加强版题解链接。kk的签到题(数据加强版) ---题解_qq_51034140的博客-优快云博客
#include<bits/stdc++.h> //万能头文件
typedef long long ll;
using namespace std;
int main() {
//ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
int now = 0; //记录当前已经找了now个喜欢的数
for (int i = 1; i <= 1666; i++) {
if (i % 3 == 0 || i % 10 == 3) { //如果满足不喜欢的数的条件,停止该次循环。
continue;
}
else { //否则这个数为喜欢的数,now+1。
now++;
if (now == n) { //如果现在是第n个喜欢的数,则输出i,并且退出循环!
printf("%d\n", i);
break;
}
}
}
}
return 0;
}