017年校招全國統一模擬筆試(第三場)編程題集合

變換次數


牛牛想對一個數做若干次變換,直到這個數只剩下一位數字。
變換的規則是:將這個數變成 所有位數上的數字的乘積。比如285經過一次變換後轉化成2*8*5=80.
問題是,要做多少次變換,使得這個數變成個位數。

輸入描述:

輸入一個整數。小於等於2,000,000,000。

輸出描述:

輸出一個整數,表示變換次數。

輸入例子1:

285

輸出例子1:

2

結果

您的代碼已保存
答案正確:恭喜!您提交的程序通過了所有的測試用例

實現

import java.util.*;

public class Main{
    public static void main(String [] args){
        Scanner scanner = new Scanner(System.in);
        //獲取值
        long value = scanner.nextLong();
        int count = 0;
        while(!(value<10)){
            long  temp = 1L;
            while(value>0){
                temp = temp*(value%10);
                value = (long)value/10;
            }
            value = temp;
            count++;
        }
        System.out.println(count);
    }
}

神奇數


時間限制:1秒
空間限制:32768K
給出一個區間[a, b],計算區間內“神奇數”的個數。
神奇數的定義:存在不同位置的兩個數位,組成一個兩位數(且不含前導0),且這個兩位數爲質數。
比如:153,可以使用數字3和數字1組成13,13是質數,滿足神奇數。同樣153可以找到31和53也爲質數,只要找到一個質數即滿足神奇數。

輸入描述:

輸入爲兩個整數a和b,代表[a, b]區間 (1 ≤ a ≤ b ≤ 10000)。

輸出描述:

輸出爲一個整數,表示區間內滿足條件的整數個數

輸入例子1:

11 20

輸出例子1:

6

結果

您的代碼已保存
答案正確:恭喜!您提交的程序通過了所有的測試用例

實現

import java.util.Arrays;
/**針對每個數字取其兩位進行判斷是否爲質數,存在質數則累加,然後退出
 **/
import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int start = scanner.nextInt();
        int end = scanner.nextInt();
        int count = 0;
        for (int i = start; i <= end; i++) {
            if(isAmazing(i))
                count++;
        }
        System.out.println(count);
    }

    //判斷一個數是否爲神奇數
    public static boolean isAmazing(int value) {
        String string = String.valueOf(value);
        for (int i = 0; i < string.length(); i++) {
            for (int j = i + 1; j < string.length(); j++) {
                int value1 = (string.charAt(i)-'0') * 10 + (string.charAt(j)-'0');
                int value2 = (string.charAt(j)-'0') * 10 + (string.charAt(i)-'0');
                if(value1>10&&isZhi(value1))
                    return  true;
                if(value2>10&&isZhi(value2))
                    return  true;
            }
        }
        return false;
    }
    //判斷一個兩位數是否爲質數
    public static boolean isZhi(int value) {
        if (value < 10)
            return false;
        for (int i = 2; i < value / 2 + 1; i++) {
            if (value % i == 0)
                return false;
        }
        return true;
    }
}

添加字符


時間限制:1秒
空間限制:32768K
牛牛手裏有一個字符串A,羊羊的手裏有一個字符串B,B的長度大於等於A,所以牛牛想把A串變得和B串一樣長,這樣羊羊就願意和牛牛一起玩了。
而且A的長度增加到和B串一樣長的時候,對應的每一位相等的越多,羊羊就越喜歡。比如”abc”和”abd”對應相等的位數爲2,爲前兩位。
牛牛可以在A的開頭或者結尾添加任意字符,使得長度和B一樣。現在問牛牛對A串添加完字符之後,不相等的位數最少有多少位?

輸入描述:

第一行爲字符串A,第二行爲字符串B,A的場地小於等於B的長度,B的長度小於等於50.字符均爲小寫字母。

輸出描述:

輸出一個整數表示A串添加完字符之後,不相等的位數最少有多少位?

輸入例子1:

abe
cabc

輸出例子1:

1

import java.util.*;
public class Main{
    public static void main(String [] args){
        Scanner scanner = new Scanner(System.in);
        String a = scanner.nextLine();
        String b = scanner.nextLine();//長
        int min = Integer.MAX_VALUE;
        for(int i = 0;i<=b.length()-a.length();i++){
                int index = getNumber(b,i,a);
                if(index<min)
                    min = index;
        }
        System.out.println(min);
    }
    public static int getNumber(String string1,int start,String string2){
        int count = 0;
        int end = string2.length()+start;
        for(int i = start,j = 0;i<end&&j<string2.length();i++,j++){
            if(string1.charAt(i)!=string2.charAt(j))
                count++;
        }
        return count;
    }   
}

數組變換


時間限制:1秒
空間限制:32768K
牛牛有一個數組,裏面的數可能不相等,現在他想把數組變爲:所有的數都相等。問是否可行。
牛牛可以進行的操作是:將數組中的任意一個數改爲這個數的兩倍。
這個操作的使用次數不限,也可以不使用,並且可以對同一個位置使用多次。

輸入描述:

輸入一個正整數N (N <= 50)
接下來一行輸入N個正整數,每個數均小於等於1e9.

輸出描述:

假如經過若干次操作可以使得N個數都相等,那麼輸出”YES”, 否則輸出”NO”

輸入例子1:

2
1 2

輸出例子1:

YES

結果

您的代碼已保存
答案正確:恭喜!您提交的程序通過了所有的測試用例

實現

import java.util.*;

public class Main{
    public static void main(String [] args){
        Scanner scanner = new Scanner(System.in);
        int number = scanner.nextInt();
        int index = 0;
        int flag = 1;
        while(index<number){
            int item = scanner.nextInt();
            if(item==1){
                index++;
                continue;
            }
            if(flag==1){
                flag = item;
                index++;
                continue;
            }
            if((item>=flag&&item%flag!=0)||(item<=flag&&flag%item!=0)||item==0)
            {   System.out.println("NO");
                return ;
            }
            index++;

        }
        System.out.println("YES");
    }
}

排序子序列


牛牛定義排序子序列爲一個數組中一段連續的子序列,並且這段子序列是非遞增或者非遞減排序的。牛牛有一個長度爲n的整數數組A,他現在有一個任務是把數組A分爲若干段排序子序列,牛牛想知道他最少可以把這個數組分爲幾段排序子序列.
如樣例所示,牛牛可以把數組A劃分爲[1,2,3]和[2,2,1]兩個排序子序列,至少需要劃分爲2個排序子序列,所以輸出2

輸入描述:

輸入的第一行爲一個正整數n(1 ≤ n ≤ 10^5)

第二行包括n個整數A_i(1 ≤ A_i ≤ 10^9),表示數組A的每個數字。

輸出描述:

輸出一個整數表示牛牛可以將A最少劃分爲多少段排序子序列

輸入例子1:

6
1 2 3 2 2 1

輸出例子1:

2

結果

您的代碼已保存
答案正確:恭喜!您提交的程序通過了所有的測試用例

實現

import java.util.*;

public class Main{

    public static void main(String[] args) {
        //獲取輸入
        Scanner scanner = new Scanner(System.in);
        int number = scanner.nextInt();
        int index = 0;
        int[] value = new int[number];
        while (index < number) {
            value[index++] = scanner.nextInt();
        }
        //處理
        int count = 1;
        int  flag = 0;
        if (value[1] >= value[0])
            flag = 1;
        else
            flag = -1;
        for (int i = 2; i < value.length; i++) {
            if(value[i]==value[i-1])
                continue;
            if (value[i] > value[i - 1] && ((flag ==1)||(flag==0)))
                {
                flag = 1;
                continue;
            }
            if ((value[i] < value[i - 1]) && ((flag == -1)||(flag==0))){
                flag = -1;
                continue;
            }
            flag = 0;
            count++;
        }
        System.out.println(count);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章