特殊完全平方数怎么求???

题目描述

如果一个整数a是某个整数b的平方,那么这个正整数 a就 叫做完全平方数。比如0,1,4,9,16...这样的数都是完全平方数。在所有的完全平方数中,有些又比较特殊,称为特殊完全平方数,这些特殊的完全平方数有一个特点是,该数中至少有两个位子上的数字是相同的,例如100就是一个特殊完全平方数,100即是完全平方数,又符合至少有两个位子上的数字是相同的。

现在请你编程找出a到b范围内符合特殊完全平方数的第n个数(从小到大的第n个。

输入要求

一行,三个用空格隔开的整数分别是a,b和n,其中100≤a<b<=100000,1≤n≤50。

输出要求

如果能够找到第n个满足条件的特殊完全平方数则输出那个完全平方数。

如果不能够找到第n个满足条件的,则输出两行,第一行输出字符串“NO”,第2行输出在a b范围内能够找到的满足条件的特殊完全平方数的总个数。

样例输入 复制

100 999 1

样例输出 复制

100

我好没打完的代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
    int a, b, n;
    cin >> a >> b >> n;
    for (int i = a; i <= b; i++) {
        for (int j = 1; j <= i; j++) {
            if (j * j == i && i - a + 1 == n){
                cout << i;
                break;
            }
        }
    }
    return 0;
}

 

 

有人回答吗

简单说一下,我觉得你可以从根号a到根号b来做一个遍历:

count = 0; // count用来机数==计数

for i from 根号a to 根号b:

      c = i *i ;

       if c 符合条件:

           count++;

           if count == n 

               return i*i

// 如果循环结束count<n 那么说明不存在这个数

return -1

#include<iostream>
#include <cmath>
#include<string>
#include <sstream>
using namespace std;
int c=0;
bool match(double num,double n){
    stringstream ss;
    ss << num;
    string stri = ss.str();
    int m=stri.size();
    bool flag=false;
    for(int i=0;i<m-1;i++){
        for(int j=0;j<m-1-i;j++){
            if(stri[j]==stri[j+1])
                c++;
            if(c==n){
                cout<<num<<endl;
                flag=true;
                return true;
                break;
            }
        }
        if(flag){
            
            break;
        }
    }
    return false;
}
int main() {
    double a, b, n;
    cin >> a >> b >> n;
    for (double i = a; i <= b; i++) {
        double m=sqrt(i);       
        if(m==(int)m){     
            cout<<"数字:"<<i<<endl;    
            bool temp=match(i,n);
            if(temp) break;
        }
    }
    return 0;
}