public class 排他平方数 {
public static void main(String[] args) {
long s;
int []arr=new int[6];
int [][]brr=new int[1000000][10];
int y,k,n=0;
for (int i=100000;i<1000000;i++){
n=0;
k=i;
y=0;
s= (long) i *i;
while (k>0){
arr[y]=k%10;
brr[i][k%10]++;
if(brr[i][k%10]==2){
n=1;
break;
}
y++;
k/=10;
}
while (s>0&&n==0){
for (int m=0;m<6;m++){
if (s%10==arr[m]) {
n=1;
break;
}
}
s/=10;
}
if (n==0&&s==0){
System.out.println(i);
}
}
}
}
2.买不到的数目https://www.lanqiao.cn/problems/213/learning/
这题疑问有点多,解析一下下吧:
假设 给你两个数 a,b(定a 先推为什么不能大于结果不能大于a*b
1.假设有一个值 大于a*b了,例如a*b+n无法买到
那么从a*b+n开始
下一个能买到的数应该是 上一个能买到的数+a或者+b
而它跨过了a*b+n这个值
那么这上一个应该在 a*b+n-a+1-----a*b+n-1这个区间内
而它跨越的也应该是一整个长度为a-1个数的区间所以把上一个值给定为0
即将a*b+n-a+1-----a*b+n-1这个区间中能到达的那个值定为0,就又是一轮新的循环
那么在下一个a*b+n时,同样无法到达
比如 3 5
3 5 6 8 9 10 11 12 13 14 15 16 ......x
假设x无法到达,而x-1可以到
那么从x-1 加上一个3或者5 最小为x+2,那么就是 x,x+1两个数都不能到达
那把x-1 当成0,x当成1 x+1当成2 x+2当成3 是不是又开始了新的一轮
3 5 6 8 9 10 11 12 13 14 16 ......x
接下来是为什么推a*b-a-b
因为不可能大于a*b 所以a*b开始的值都可以到
那么 a*b---a*b+b的值都是可以到的
a*b-a的值可以从 a*b获得
a*b-b的值可以也是同理 因为a*b---a*b+b的值都可以获得
所以 a*b-b----a*b的值也都可以获得
(注意 a*b-b的要求是全部都是b,a*b-a的要求是全a,而其他值则为同时存在a和b)
而 a*b-b+1是一个同时存在a和b的值,所以它可以到上一个值 a*b-b+1-a(a 但是再前一个值无法到达
及a*b-b-a
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a=scan.nextInt();
int b=scan.nextInt();
System.out.print(a*b-a-b);
scan.close();
}
}
3.回文日期 https://www.lanqiao.cn/problems/498/learning/
不想多说,这题是我拉胯了:
import java.util.Scanner;
public class 回文 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N=scan.nextInt();
int j,k;
for(j=N;j<99991231;j++)
{
int m = one(j);
if(m==1) break;
}
for(k=N+1;k<99991231;k++)
{
int n = two(k);
if(n==1) break;
}
System.out.println(j);
System.out.println(k);
scan.close();
}
static int one(int x)
{
int y = 0;
int[] a=new int[8];
for(int i=0;i<8;i++)
{
a[i]=x%10;
x/=10;
}
if(a[0]==a[7]&&a[1]==a[6]&&a[2]==a[5]&&a[3]==a[4]&&a[4]*10+a[5]<=12&&a[4]*10+a[5]>0&&a[6]*10+a[7]<=31&&a[6]*10+a[7]>0) y=1;
return y;
}
static int two(int x)
{
int y = 0;
int[] a=new int[8];
for(int i=0;i<8;i++)
{
a[i]=x%10;
x/=10;
}
if(a[0]==a[7]&&a[1]==a[6]&&a[2]==a[5]&&a[3]==a[4]&&a[0]==a[2]&&a[1]==a[3]&&a[4]*10+a[5]<=12&&a[4]*10+a[5]>0&&a[6]*10+a[7]<=31&&a[6]*10+a[7]>0) y=1;
return y;
}
}
4.约瑟夫环 https://www.lanqiao.cn/problems/231/learning/
直接规律完结:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int sum = 0;
for(int i = 2;i



