1. Bookshelf B(入门)2/25
没什么好说的,一道简简单单的入门题。我和题解一样思路!原来这就是快排+贪心思想!
import java.util.Scanner;
import java.util.Arrays;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
//输入
int n=sc.nextInt();
int b=sc.nextInt();
int[] a=new int[n];
//放进数组
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
}
//由小到大排序
Arrays.sort(a);
//从最大开始累加至足够
int s=0;
int i=a.length-1;
int count=0;
while(s<b){
count++;
s+=a[i];
i--;
}
//输出
System.out.println(count);
}
}
4. 欢乐的跳(入门)2/25
虽然是道入门题,但是因为我扭曲的思路,使我用了几百次各种各样的方法,当然也重新巩固了不少知识。例如快排,例如ArrayList的实用方法等。其实换种思路真的会简单很多。
import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
//输入
int n=sc.nextInt();
int m=1;
int[] a=new int[n];
ArrayList<Integer> b=new ArrayList<>(n-1);
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
if(i<n-1){
b.add(m);
m++;
}
}
//计算出绝对值并存储
int count=0;
for(int i=0;i<n-1;i++){
int num=Math.abs(a[i+1]-a[i]);
int index=Arrays.binarySearch(b.toArray(),num);//又忘了!二分查找必须有序!!!
if(index>=0){
if(num==b.get(index)){
count++;
b.remove(index);
}
}
//System.out.println(num+" "+index+" "+count);
}
if(count==n-1)
System.out.println("Jolly");
else
System.out.println("Not jolly");
}
}
优秀思路: 先把差求出来,再sort,和[1,n-1]做比较,如果不同,直接printf退出,如果一直到最后未能输出,则为欢乐的跳。
int a[1005],c[1005];//定义
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);//读入
}
for(int i=1;i<n;i++){
c[i]=abs(a[i]-a[i+1]);//处理差
}
sort(c+1,c+n);
for(int i=1;i<n;i++){
if(c[i]!=i){printf("Not jolly\n");return 0;}//判断输出
}
printf("Jolly\n");//如果未能输出,则为正确答案
return 0;//过程结束
}