题目
Description
对给定的整数X, 统计出小于等于X的整数中满足这样条件的正整数的个数,其平方数为一个9位数,并且其各位数字各不同。
Input
第1行 是测试数据的组数t,每组测试数据占一行,每行包括一个位长为5位的正整数X.
Output
对应每组测试数据输出共t行,每行为满足条件的数的个数。
Sample Input
2
10000
60000Sample Output
0
83
题解
平方是 9
位数的数满足 [10000,31622]
判断 10000
~ min(n,31622)
之间所有的数的平方
对于每个数判断每一位是不是相同即可
要注意,题目要求是小于等于
代码
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <vector> #include <list> #include <queue> #include <stack> #include <map> #include <set> #include <functional> using namespace std; bool vis[10]; void Do() { int n; scanf("%d",&n); int cnt = 0; for(int i = 10000;i <= 31622 && i <= n;i++) { memset(vis,false,sizeof(vis)); bool flag = true; int k = i*i; while(k) { if(vis[k % 10]) { flag = false; break; } vis[k % 10] = true; k /= 10; } if(flag) cnt++; } printf("%d\n",cnt); } int main() { int T; scanf("%d",&T); while(T--) Do(); return 0; }