题目1
有0,1,2,...,n共n+1个非负整数,如果给定其中的n个数,请找出缺失的数。 输入一行共n+1个数,用空格隔开,其中第一个数表示后n个数中最大的数,输出缺失的数。 如: 输入 3 3 0 1 输出 2
import java.util.Scanner;
public class Main {
public static void main(String [] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int [] array=new int[n+1];
for(int i=0;i<n;i++){
array[sc.nextInt()]++;
}
for(int i=0;i<=n;i++){
if(array[i]==0){
System.out.println(i);
break;
}
}
}
}
题目2
数轴上的一个点,位置为n,它可以向三种移动方式: (1)向前走一步,即向n+1位置移动; (2)向后走一步,即向n-1位置移动 (3)向2*n位置移动 假设点的其实位置为0,要移动到位置x,至少需要多少步。 如: 输入 3 输出 3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
if(n<=3){
System.out.println(n);
return ;
}
int [] d=new int[n+1];
d[0]=0;
d[1]=1;
d[2]=2;
d[3]=3;
for(int i=4;i<=n;i++){
if(i%2==0){
d[i]=Math.min(d[i-1]+1, d[i/2]+1);
}else{
d[i]=d[i-1]+1;
}
}
System.out.println(d[n]);
}
}
题目3
如果某个数的质因子只有2,3,5,则称这个数满足条件。这里认为1也是满足条件的。 如果把满足条件的数按从小到大的顺序排列,则前10个数是1,2,3,4,5,6,8,9,10,12。 输入一个正整数n,输出第n个满足条件的数。 如: 输入 5 输出 5
思路:每一个数都是前面某些数乘以2,3,5,7中最小的一个,用数组存储n个数,然后在用四个指针(数组小标)分别记录当前乘以2,3,5,7数(某些数)的位置,起始的时候指针值都为1,根据当前数的大小修改四个指针的大小,如当前数是20,那么2的指针一定是指向12,3的指针指向7,5的指针指向5,7的指针指向3,然后在利用四个指针计算下一个数,取12*2,7*3,5*5,3*7中最小的一个,最后在根据当前的数的大小,修改相应的指针(每次只需要增加一个指针就行了)。
更加详细的思路可阅读如下博客:质因数只能是2,3,5,7的第n大个数(丑数求解)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int [] array=new int [n];
int p2=0,p3=0,p5=0;
array[0]=1;
for(int i=1;i<n;i++){
while(array[p2]*2<=array[i-1]){
p2++;
}
while(array[p3]*3<=array[i-1]){
p3++;
}
while(array[p5]*5<=array[i-1]){
p5++;
}
array[i]=Math.min(array[p2]*2, array[p3]*3);
array[i]=Math.min(array[i], array[p5]*5);
}
int result=array[n-1];
System.out.println(result);
}
}