- 一.2020年能力挑战赛初赛
- 1-1题目
- 1.1解题思路
- 1-2题目
- 1.1解题思路
- 1-3题目
- 2-1题目
- 2-3题目
1-1 统计1到N的整数中,被A除余A-1的偶数的个数
输入说明:整数 N(N<10000), A, (A
输入样例:10 3
输出样例:2
(说明:样例中符合条件的2个数是 2、8)
- 先使用java.util.Scanner类进行接收输入N,A
- 1到N整数的偶数控制可使用for循环for(int i=2;i
- 使用if(i%A==A-1)就将count++
- 代码如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int N=input.nextInt();//读入整数
int A=input.nextInt();//读入A
int count=0;
for(int i=2;i<=N;i+=2){
if(i%A==A-1){
count++;
}
}
System.out.println(count);
}
}
1-2题目
1-2 统计1到N的整数中,除了1和自身之外,至少还能被两个数整除的数的个数
输入说明:整数 N(N<10000);
输出说明:符合条件的数的个数
输入样例:10
输出样例:3
(说明:样例中符合条件的3个数是6、8、10)
- 质数的定义:质数又叫素数,指的是大于1的自然数,除了1和本身外,不能被其他数整除的数叫质数。或者定义为:大于1的自然数,除了1和本身外不在用于其他因数。
import java.lang.Math;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int N=input.nextInt();
int count=0;
for(int i=2;i<=N;i++){
if(test(i)){
count++;
}
}
System.out.println(count);
}
public static boolean test(int n){
int N=(int)Math.sqrt(n);
boolean flag=false;
for(int i=2;i<=N;i++){
if(n%i==0&&n/i!=i){
flag=true;
}
}
return flag;
}
}
1-3题目
1-3 统计从1到N的整数中,所有立方值的平方根为整数的数的个数
输入说明:整数 N(N<10000);
输出说明:符合条件的数的个数,如43=64=82
输入样例:10
输出样例:3
(说明:样例中符合条件的3个数是1、4、9)
1e-6参考链接
1e-6 :
- 1e-6表示1乘以10的负6次方。
- Math.abs(x)<1e-6其实相当于x==0
- 1e-6(也就是0.000001)叫做epslon,用来抵消浮点运算中因为误差造成的相等无法判断的情况。它通常是一个非常小的数字(具体多小要看你的运算误差)
//方法一:
import java.util.Scanner;
import java.lang.Math;
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int N = input.nextInt();
int ans = 0;
for(int i = 1;i <= N;i++){
double temp = Math.pow(i,3);
double temp1=Math.sqrt(temp);
if(Math.abs(temp1 - (int)temp1) < 1e-6){
ans++;
}
}
System.out.println(ans);
}
}
//方法二:
import java.util.Scanner;
import java.lang.Math;
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int N = input.nextInt();
int ans = 0;
for(int i = 1;i <= N;i++){
double temp = Math.pow(i,3);
double temp1=Math.sqrt(temp);
if(temp1==(int)temp1){
ans++;
}
}
System.out.println(ans);
}
}
//方法三:
import java.util.Scanner;
import java.lang.Math;
import java.lang.Double;
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int N = input.nextInt();
int ans = 0;
for(int i = 1;i <= N;i++){
double temp=Math.pow(i,3);
double temp1=Math.sqrt(temp);
String string=Double.toString(temp1);
int index=string.indexOf(".");
String substring=string.substring(index+1);
if(substring.equals("0")){
ans++;
}
}
System.out.println(ans);
}
}
//方法四:
import java.util.Scanner;
import java.lang.Math;
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int N = input.nextInt();
int ans = 0;
for(int i = 1;i <= N;i++){
int temp = (int) Math.sqrt(i*i*i);
int Value = temp*temp ;
int realValue = i*i*i;
if(realValue==temp){
ans++;
}
}
System.out.println(ans);
}
}
2-1题目
2-1 小明今天收了N个鸡蛋,每个鸡蛋各有重量,现在小明想找M个重量差距最小的鸡蛋摆成一盒出售,输出符合条件的最重一盒鸡蛋的总重量
输入说明:第一行,鸡蛋个数N(N<1000) 每盒个数M(M
输入样例:8 4
11 9 12 5 10 19 8 6
输出样例:42.00
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner input=new Scanner(System.in);
int N=input.nextInt();
int M=input.nextInt();
ArrayList weight=new ArrayList<>();
for(int i=0;i(){
@Override
public int compare(Double o1,Double o2){
if(o1>o2){
return 1;
}else if(o1==o2){
return 0;
}
return -1;
}
});
double maxSum=0;
double minDifferValue=Double.MAX_VALUE;
for(int i=0;i
2-3题目
2-3 给出长度为N的各不相同整数组成的数组,求解2个数相加为M的情况个数。
输入说明:
第一行,2个空格分隔的整数,分别表示数组中元素个数N(N<1000) 和值M;
第二行,N个用空格分隔的数组元素(整数)。
输出说明:
一行,一个整数,为相加为M的情况个数。
输入样例:
8 10
1 4 2 5 3 19 8 6
输出样例:
2
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner input=new Scanner(System.in);
int N=input.nextInt();
int M=input.nextInt();
int[] array=new int[N];
int count=0;
for(int i=0;i 


