0
点赞
收藏
分享

微信扫一扫

算法4-中兴捧月杯热身赛1

向上的萝卜白菜 2022-04-23 阅读 58
java

题目1:素数判断

需求
给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。输入描述:测试数据有多组,每组输入一个数n。输出描述:对于每组输入,若是素数则输出yes,否则输入no。
样例1:
输入:13输出:yes

代码

// idea_algorithm
package offer2;
import java.util.Scanner;
public class Test422 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        if(method(n)){
            System.out.println("yes");
        }else{
            System.out.println("no");
        }
    }
    public static Boolean method(int n){
        if(n <= 1 ){
            return false;
        }else{
            // 注意这里遍历得从2开始。双指针实现。
            for(int i = 2,j= n-1;i<= j; i++,j--){
                if(n%i == 0|| n%j == 0){
                    return false;
                }
            }
        }
        return true;
    }
}

注意点

循环开始值是2

使用for循环遍历找n可以整除的数的时候,循环开始的点是2,因为0 不能当除数,1不是非素数与素数的区别。

题目2:亲和串

需求
人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,
同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现,现在长
大了却不知道怎么去判断亲和串了,于是他只好又再-次来请教聪明且乐于助人的你来解决这个问
题。亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那
么我们就说s2是s1的亲和串。
输入描述:本题有多组测试数据,每组数据的第一行包含输入字符串s1,第 二行包含输入字符串s2,
s1与s2的长度均小于100000。
输出描述:如果s2是s1的亲和串, 则输出"yes",反之,输出"no"。每组测试的输出占-行。
样例1:
输入: AABCD
CDAA
输出: yes

代码

package offer2.Test423;

import java.util.Scanner;

public class Test423 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String strSum = in.next();
        String strSon = in.next();
        if(method(strSum,strSon) != -1){
            System.out.println("yes");
        }else{
            System.out.println("no");
        }
    }
    public static int method(String strSum,String strSon){
        String s = strSum + strSum;
        if(strSum.length() == 0 || strSum == null || strSon == null || strSum.length()-strSon.length() <0){
            return -1;
        }else{
            int index = s.indexOf(strSon);
            return index;
        }
    }
}

注意点

java.util.NoSuchElementException: No line found 编译出现这个问题。

分析:
经过测试发现问题可能是定义一个Scanner对象,前后两个字符串输入的内容不一样,一个是字符串“abx”,另一个是数字字符串"123"。
其中前后两个串分别是“12345” “123” 这种形式可以正确执行。
解决:

Scanner sc = new Scanner(System.in);
String s = sc.next();
// 之前使用的是nextLine()。
Scanner 类的next和nextLine方法

Scanner类的方法

方法名说明
String next()查找并返回此扫描仪的下一个完整令牌
不接收空格,在接收有效数据之前,所有的空格或tab键投被忽略,若有有效数据,则遇到这些键退出
int nextInt()将输入的下一个标记扫描为int
String nextLine()将此扫描仪推进到当前行并返回跳过的输入
可以接收空格或tab键,输入以enter键结束

代码

// idea_algorithm 
package offer2.Test423;

import java.util.Scanner;

public class StringnextLineDemo {
    public static void main(String[] args) {
        method1();
    }
    public static void method(){
        Scanner input = new Scanner(System.in);
        String s1 = input.next();
        String s2 = input.next();
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1 + s2);

        // 键盘输入ABC(空格)DEF(空格)(空格)
        // 输出结果是:
        // ABC
        // DEF
        // ABCDEF
        // 分析:没有接收空格,要是接收了空格,那么最后的输出应该会有空格,ABC 和 DEF 之间的空格被当做 两个字符串之间的划分,表示输入的是两个字符串
    }

    public static void method1(){
        Scanner input = new Scanner(System.in);
        String s1 = input.next();
        String s2 = input.next();
        String s3 = input.nextLine();

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s1 + s2);
        System.out.println(s1 + s2 + s3);

        // 键盘输入A(空格)B(空格)C(空格)D(空格)
        // 输出结果是:
        //A
        //B
        //(空格)C(空格)D(空格)
        //AB
        //AB(空格)C(空格)D(空格)
        // nextLine()方法可以接收空格或tab键。
    }
}
举报

相关推荐

0 条评论