输入一个整数
代表自守数的范围。
输出一个整数,代表
到
之间的自守数个数。
25
5
在这个样例中,
是自守数。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int n = sc.nextInt();
int count = 0;
for (int i = 0; i <= n; i++) {
String str = String.valueOf(i * i);
String index = String.valueOf(i);
// 比较 i的值是否与i*i的最后相同
if (index.equals(str.substring(str.length() - index.length()))) {
count++;
}
}
System.out.println(count);
}
}
} //深度优先遍历,从1,5,6开始,在他们是自守数的情况下在头部尝试添加1到9。
//若添加后不构成自守数,则放弃往下dfs,否则,count++,继续向下深搜。
//时间复杂度从O(N)降低到O(log(N))...不晓得这个算对没..
import java.util.*;
public class Main {
public static int count = 1;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n=in.nextInt();
int[] nums = new int[]{1,5,6};
for(int i = 0; i < 3; i++) {
int cur = nums[i];
dfs(cur, n);
}
System.out.println(count);
count = 1;
}
}
public static void dfs(int cur, int n) {
if(cur > n)
return;
if(check(cur)) {
count++;
for(int j = 1; j < 10; j++) {
String tmp = String.valueOf(cur);
tmp =j + tmp;
int tmpCur = Integer.parseInt(tmp);
dfs(tmpCur, n);
}
}
}
public static boolean check(int i) {
String a = String.valueOf(i);
int c = i*i;
String b = String.valueOf(c);
int cura = a.length()-1;
int curb = b.length()-1;
while(cura >= 0) {
if(a.charAt(cura) != b.charAt(curb))
return false;
cura--;
curb--;
}
return true;
}
} while( n = readline()){
var res = [];
for(var num = 0 ; num <= +n ; num ++){
var len = (num + '').length;
var str = (num + '');
var all = 0;
var istrue = true;
for(var i = 0 ; i < len ; i ++){
for(var j = 0 ; j <= i ; j ++){
all += str[len-1-j] * str[len-1-(i-j)] * Math.pow(10, i);
}
if((all + '').slice(-i-1) !== str.slice(-i-1)){
istrue = false;
break;
}
}
if(istrue) {
res.push(num);
}
}
console.log(res.length);
} 害怕暴力求解会产生问题,所以想了想办法先把乘法表达式分解,从后向前一位一位的乘,比如9376,先计算最后一个数,应该为6*6取后一位,为6,在计算最后两位6*6+6*7*10+7*6*10=876,也满足,再计算后三位,876 + 3*6*10^2 + 7*7*10^2 + 6*3*10^2 = 9376, 也满足,再计算最后四位,9376 + 9*6*10^3 + 3*7*10^3 + 7*3*10^3 + 6*9*10^3 = 159376,至此已经计算了后四位没必要再计算了,而且满足条件,则成立。//自己写个判断函数,也很简单的
#include<iostream>
using namespace std;
bool isZiShouShu(int num){//判断是否为自守数
long long squrtNum = num*num;
while (squrtNum && num){
if (squrtNum % 10 != num % 10){
return false;
}
else{
squrtNum /= 10;
num /= 10;
}
}
return true;
}
int main(){
int n;
while (cin >> n){
int cnt = 0;
for (int i = 0; i <= n; i++){
if (isZiShouShu(i))cnt++;
}
cout << cnt << endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
bool automor(int x)
{
int y=x*x;
while(x)
{
if(x%10==y%10)
{
x/=10;
y/=10;
}
else break;
}
if(x==0) return true;
else return false;
}
int main()
{
int n;
while(cin>>n)
{
bool res;
int cnt=0;
for(int i=0;i<n;i++)
{
if(automor(i)) cnt++;
}
cout<<cnt<<endl;
}
system("pause");
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int num = sc.nextInt();
int count = 0;
while(num >= 0){
long num_square = num * num;
char[] c1 = String.valueOf(num_square).toCharArray();
char[] c2 = String.valueOf(num).toCharArray();
int c1_length = c1.length;
int c2_length = c2.length;
int i;
for(i = 1; i <= c2_length; i++){
if(c1[c1_length - i] != c2[c2_length - i])
break;
}
if(i == c2_length + 1)
count++;
num--;
}
System.out.println(count);
}
sc.close();
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int n = sc.nextInt();
int count = 0;
for(int i = 0 ;i <= n;i++){
if(isZiShouShu(i)){
count ++;
}
}
System.out.println(count);
}
}
public static boolean isZiShouShu(int num){
int result = num * num;
String numStr = ""+num;
String resultStr = ""+result;
int index = resultStr.length()-numStr.length();
if(resultStr.substring(index).equals(numStr)){
return true;
}else{
return false;
}
}
} import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int n = sc.nextInt();
int count = 0;
for(int i = 0 ;i <= n;i++){
int num = i*i;
if(String.valueOf(num).endsWith(String.valueOf(i))){
count++;
}
}
System.out.println(count);
}
}
} import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "";
while ((str = br.readLine()) != null) {
int n = Integer.parseInt(str);
System.out.println(CalcAutomorphicNumbers(n));
}
br.close();
}
private static int CalcAutomorphicNumbers(int n) {
int count = 0;
for (int i = 0; i <= (n); i++) {
String str1 = String.valueOf(i);
String str2 = String.valueOf(i * i);
if (str2.endsWith(str1)) {
count++;
}
}
return count;
}
} import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
System.out.println(self_num(n));
}
}
public static int self_num(int n){
int count = 0;
for(int i = 0; i <= n; i++){
if(is_self_num(i)) count++;
}
return count;
}
public static boolean is_self_num(int i){
int power_two = i*i;
if(power_two == 1 || power_two == 0) return true;
int devide = 10;
while(power_two/devide != 0){
if(power_two % devide == i) return true;
else devide *= 10;
}
return false;
}
} 系统方法endsWith搞定
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static int CalcAutomorphicNumbers( int n)
{
String a = String.valueOf(n*n);
String b = String.valueOf(n);
if(a.endsWith(b) == true) {
return 1;
}
return 0;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
int num = 0;
for(int i = 0; i <= a; i++) {
if(CalcAutomorphicNumbers(i) == 1) {
num++;
}
}
System.out.println(num);
}
}
}
/**
*
*/
import java.util.Scanner;
/**
* @author April Chou
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
System.out.println(countAutomorphicNumbers(sc.nextInt()));
}
sc.close();
}
public static int countAutomorphicNumbers(int input) {
int flag = 0;
for(int i=0; i<=input; i++) {
long result = i * i;
String numI = i + "";
String number = result + "";
if(number.endsWith(numI)) {
flag ++;
}
}
return flag;
}
}
直接调用String endsWith就搞定了啊