备战蓝桥杯JAVA B组Day7
前言
零基础小白备战蓝桥杯第七天,刷题内容为:洛谷题单【入门3】循环结构。
P5722 【深基4.例11】数列求和
AC代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long sum = 0;
for(int i = 1;i <= n;i++) {
sum = sum + i;
}
System.out.print(sum);
}
}
补充:
简单的循环。
P5723 【深基4.例13】质数口袋
AC代码:
import java.util.Scanner;
public class Main{
public static void main(String []args) {
Scanner sc = new Scanner(System.in);
int L = sc.nextInt();
int count = 0;
int sum = 0;
for(int i = 2;i <= L;i++) {
if(f(i)) {
sum = sum + i;
if(sum > L){
break;
}
System.out.println(i);
count++;
}
}
System.out.print(count);
}
public static boolean f(int n) {
boolean flag = true;
for(int i = 2;i <= Math.sqrt(n);i++) {
if(n % i == 0) {
flag = false;
break;
}
}
return flag;
}
}
补充:
判断质数的三种方法:
质数,也称为素数,是指一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。在Java中,判断一个数是否为质数可以通过几种不同的方法实现。
1.常规方法:
最基本的方法是遍历从2到该数减1的所有自然数,检查是否有任何数能够整除目标数。如果在遍历过程中找到了一个能够整除的数,则可以确定该数不是质数。以下是实现这一方法的Java代码示例:
public static void isPrime(int n) {
int i = 2;
for (; i < n; i++) {
if (n % i == 0) {
System.out.println(n + "不是素数");
break;
}
}
if (n == i) {
System.out.println(n + "是素数");
}
}
2.提高效率的方法:
另一种稍微高效的方法是将遍历的范围限制在2到目标数的一半,因为任何数的最大因数都不会超过其一半。这样可以减少遍历的次数,提高判断效率。以下是Java代码示例:
public static void isPrime(int n) {
int m = 0;
for (int i = 2; i < n / 2; i++) {
if (n % i == 0)
m++;
}
if (m == 0)
System.out.println(n + "是素数");
else
System.out.println(n + "不是素数");
}
3.高效方法
最高效的方法是只遍历从2到目标数的平方根。因为如果一个数不是质数,那么它的因数一定是成对出现的,其中一个因数不大于它的平方根,另一个因数不小于它的平方根。如果在遍历到平方根的过程中都没有找到能够整除的数,则可以确定该数是质数。以下是Java代码示例:
public static void isPrime(int n) {
boolean flag = true;
for (int j = 2; j <= Math.sqrt(n); j++) {
if (n % j == 0) {
flag = false;
break;
}
}
if (flag)
System.out.println(n + "是素数");
else
System.out.println(n + "不是素数");
}
在实际应用中,推荐使用最后一种方法,因为它在效率上更优,尤其是在判断较大的数时。
P1217 [USACO1.5] 回文质数 Prime Palindromes
AC代码:
import java.util.Scanner;
public class Main{
public static void main(String []args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int min = Math.min(9999999,b);
if(a%2==0){
a = a + 1;
}
for(int i = a;i <= min;i = i + 2){
if(d(i)) {
if(f(i)){
System.out.println(i);
}
}
}
}
public static boolean d(int n) {
int a = 0, b = n;
while (n > 0) {
int c = n % 10;
a = a * 10 + c;
n /= 10;
}
return b == a;
}
public static boolean f(int n) {
boolean flag = true;
for(int i = 2;i <= Math.sqrt(n);i++) {
if(n % i == 0) {
flag = false;
break;
}
}
return flag;
}
}
补充:
判断数字是否回文:
注意最大的回文数质数是9989899,所以使用int min = Math.min(9999999,b);来减小数据范围。偶数不可能是质数,所以使用一个if来限制只判断奇数。
P1423 小玉在游泳
AC代码:
import java.util.Scanner;
public class Main{
public static void main(String []args) {
Scanner sc = new Scanner(System.in);
double m = sc.nextDouble();
double sum = 0.0;
double n = 2;
int count = 0;
while (sum < m){
sum = sum + n;
n = n * 0.98;
count++;
}
System.out.print(count);
}
}
补充:
简单的while循环。
标签:JAVA,Scanner,int,Day7,sum,System,蓝桥,public,out From: https://blog.csdn.net/2401_88077378/article/details/143118290