AOJ 777.平方个数

172

题目



Description  


对给定的整数X, 统计出小于等于X的整数中满足这样条件的正整数的个数,其平方数为一个9位数,并且其各位数字各不同。



Input  


第1行 是测试数据的组数t,每组测试数据占一行,每行包括一个位长为5位的正整数X.


Output  


对应每组测试数据输出共t行,每行为满足条件的数的个数。


Sample Input  


2
10000
60000


Sample 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;
}
发布评论
  • 点击查看/关闭被识别为广告的评论