题目描述
如果一个整数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;
}