输入一个整数
代表自守数的范围。
输出一个整数,代表
到
之间的自守数个数。
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就搞定了啊