总时间限制:
1000ms
内存限制:
65536kB
描述
编写程序,按从小到大的顺序寻找同时符合条件1和2的所有3位数,条件为:
1.该数为完全平方数
2.该数至少有2位数字相同
例如,100同时满足上面两个条件。
输入
输入一个数n,n的大小不超过实际满足条件的3位数的个数。
输出
输出为第n个满足条件的3位数(升序)
样例输入
1
样例输出
100
思路:1.由题可知,这是三位数,所以只需在三位数之间寻找。
2.该数为完全平方数,(我开始是这样想的 x%sqrt(x)==0 ,结果报错了因为sqrt(x)是一个实型的小数,不能取余。后又发现这个式子不就是 sqrt(x) 为整数就行了吗,结果就 sqrt(x)%1==0 ,结果犯了相同的错。)不过最后相等不就是整数吗,那就判断 sqrt(x)-(int)sqrt(x)==0 不就行了吗。
3.接着取各个位数,判断是否有两个以上相同位数,如果存在就计数加一,当最后找到要找到第几个数就输出,跳出循环。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int i,k=0;
int a,b,c,x;
for(i=100;i<1000;i++){
x=i;
if(sqrt(x)-(int)sqrt(x)==0){
a=x/100;//百位
b=(x/10)%10;//十位
c=x%10;//个位
if((a==b)||(a==c)||(b==c)||(a==b&&b==c)){
k++;
}
if(k==n){
printf("%d",i);
break;
}
}
}
return 0;
}