1.判断一个数是不是素数,素数又称质数。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。
代码:
package a;
import java.util.Scanner;
//思路:采用循环,使用大于1小于判定数的数去整除判定数
public class suShu {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
isPrime(num);
}
public static void isPrime(int n){
int count=0;
//第一种循环:
//数字较大时,循环次数多,比较耗时,效率较慢
/*for(int i=2;i<n;i++){
if((n%i)==0){
count++;
}
}*/
//第二种循环:
//(任何一个书的最大公因数都小于等于它的二分之一),相比效率提高不少
/*for(int i=2;i<n/2;i++){
if((n%i)==0){
count++;
}
}*/
//第三种循环:
//(因为如果一个数不是素数就是合数,那么一定可以有两个自然数相乘得到,其中一个大于或等于它的平方根
//,一个小于等于它等平方跟)
for(int i=2;i<=Math.sqrt(n);i++){
if((n%i)==0){
count++;
}
}
if(count==0){
System.out.println(n+"是素数");
}else {
System.out.println(n+"不是素数");
}
}
}
2.统计1到N(含)之间所有立方数的个数,并输出这个数目。
提示:立方数的个数,如8是2的立方数,27是3的立方数,9不是立方数。
输入说明:一个整数N(N<100000);
输出说明:立方数的个数
输入样例:200
输出样例:5
代码:
package a;
import java.util.Scanner;
//统计1-n这之间立方数的个数并返回这个数
public class liFangShu {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数:");
int n=sc.nextInt();
int count=0;
for(int i=1;i<=n;i++){
if(isPow(i))
count++;
}
System.out.println("立方数为:"+"\n"+count);
}
//定义方法判断是否立方数
public static boolean isPow(int num){
if(num==1)
return true;
for(int i=1;i<num/2;i++){
//Math.pow(x,y)用来求以x为低的y次方值
if(Math.pow(i, 3)==num)
return true;
}
return false;
}
}
3.二、统计整数区间[N,M](N,M<100000)中所有非偶数的合数个数,并输出这个数。
输入说明:两个整数N、M;
输出说明:非偶数的合数个数
输入样例:2 16
输出样例:2
代码:
package a;
import java.util.Scanner;
//判断N-M之间非偶数的合数的个数,并返回
public class noOuShuHeShu {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入起始数:");
int N=sc.nextInt();
System.out.println("请输入终止数:");
int M=sc.nextInt();
int index=0;
for(int i=N;i<=M;i++){
if(isJi(i)&&isHe(i)){
index++;
}
}
System.out.println("非偶数的合数个数为:"+index);
}
//定义判断是否为合数的方法
public static boolean isHe(int n){
for(int i=2;i<=Math.sqrt(n);i++){
if(n%i==0)
return true;
}
return false;
}
//定义判断是否为奇数的方法
public static boolean isJi(int n){
if(n%2!=0){
return true;
}
return false;
}
}
4.字母连连看,给定一个由小写英文字母组成的字符串(长度<1000),如果字符串中有两个连续的字母相同,则这两个字母可同时消除,并不断重复该操作,直到不能消除为止。请编程判断该字符串是否可以完全消除。
输入说明:一个字符串。
输出说明:如果可以完全消除,输出“YES”,如果不可以,输出消除后的结果。
输入样例1:abacddcaba
输出样例1:YES
输入样例2:asdfghhgf
输出样例2:asd
代码:
package a;
import java.util.ArrayList;
import java.util.Scanner;
public class d {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一串字符串:");
String str = in.nextLine();
//toCharArray()将字符串对象中的字符转换成一个字符数组
char[] val = str.toCharArray();
//创建集合,存放数组中的每一个数据
ArrayList list = new ArrayList();
for (int i = 0; i < val.length; i++) {
list.add(val[i]);
}
//循环消除相同的元素
OUT:for (int i = 0; i < val.length; i++) {
for (int j = 0;j < list.size() - 1;j++) {
if (list.size() < 2) {
break OUT;
}
if (list.get(j) == list.get(j + 1)) {
list.remove(j + 1);
list.remove(j);
continue;
}
}
}
if (list.size() == 0) {
System.out.println("YES");
} else {
String value = "";
for (int i = 0; i < list.size(); i++) {
value += list.get(i);
}
System.out.println(value);
}
}
}
5.由N(N<=10000)个整数组成的数组,其中连续K(K<=200)个元素构成一个区间,称为K区间。一个K区间中所有素数的和记为Sk,请计算整个数组中,所有K区间中的最大Sk值,并输出。
输入说明:第一行是两个整数N和K,第二行输入N个数,表示数组中的元素。
输出说明:最大Sk值
输入样例:8 2
代码:
package a;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class b {
public static void main(String[] args) {
/*Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int K = scanner.nextInt();
int [] array = new int[N];
for (int i = 0; i < N; i++) {
array[i] = scanner.nextInt();
}
//创建集合,存储index
List<Integer> list = new ArrayList<>();
for (int i = 0; i < array.length - K; i++) {
int index = 0;
for (int j = 0; j < K; j++) {
if (isPrime(array[i+j])){
index+=array[i+j];
}
}
list.add(index);
}
System.out.println(Collections.max(list));
}
//判断是否为素数
private static boolean isPrime(int n){
for (int i=2;i<=(int)Math.sqrt(n);i++){
if (n%i==0) return false;
}
return true;*/
Scanner sc=new Scanner(System.in);
System.out.println("请输入N: K:");
int N=sc.nextInt(),K=sc.nextInt();
//创建数组存储1-N个数
int[] num=new int[N];
int sushu=0;//覆盖 以求得最大值
for (int i = 0; i < N; i++) {
num[i]=sc.nextInt();
}
//输出输入的数
System.out.println();
for (int i = 0; i < N; i++) {
System.out.println("输入的第"+(i+1)+"个为"+num[i]+" ");
}
//执行代码
for (int i = 0; i < N; i+=K) {//分成N/k块
int sum=0;//重置
for (int j = 0; j <K ; j++) {//每个块大小为K 依次从 i+j位置 开始判断
if(isPrime(num[j+i])) {//如果为素数
sum+=num[j+i];
if(sum>sushu) sushu=sum;
}
}
}
System.out.println(sushu);
}
//判断是否为素数
public static boolean isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
java2020模拟题
最新推荐文章于 2024-07-24 14:05:37 发布