變換次數
牛牛想對一個數做若干次變換,直到這個數只剩下一位數字。
變換的規則是:將這個數變成 所有位數上的數字的乘積。比如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);
}
}