題庫練習5(句子逆序、字符串排序、int型二進制表示中1的個數、購物單)

1. 句子逆序

將一個英文語句以單詞爲單位逆序排放。例如“I am a boy”,逆序排放後爲“boy a am I”。所有單詞之間用一個空格隔開,語句中除了英文字母外,不再包含其他字符。

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
        System.out.println(new Main().reverse(str));
    }
    public String reverse(String sentence){
        String[] str=sentence.split(" ");
        String res="";
        for(int i=str.length-1;i>0;i--)
            res+=str[i]+" ";
        return res+str[0];
    }
}

2. 字符串排序

給定n個字符串,請對n個字符串按照字典序排列。

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        
        int n=Integer.parseInt(sc.nextLine());
        int i=0;
        ArrayList<String> list=new ArrayList<>();
        
        while(i<n){
            list.add(sc.nextLine());
            i++;
        }
        Collections.sort(list);
        for(i=0;i<list.size();i++)
            System.out.println(list.get(i));
    }
}

注:

不去重,只排序。

使用ArrayList存儲。排序:Collections.sort(ArrayList al);

3. int型二進制表示中1的個數

輸入一個int型的正整數,計算出該int型數據在內存中存儲時1的個數。

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);

        int n=Integer.parseInt(sc.nextLine());

        String str=Integer.toBinaryString(n);
        char[] chs=str.toCharArray();
        int count=0;
        for(int i=0;i<chs.length;i++)
            if(chs[i]=='1')
                count++;
        System.out.println(count);
    }
}

注:

1.int轉爲二進制

String bs = Integer.toBinaryString(value);

4. 購物單

動態規劃

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String[] strs=sc.nextLine().split(" ");
        int n=Integer.parseInt(strs[0]);
        int m=Integer.parseInt(strs[1]);
        int[] v=new int[m+1];
        int[] p=new int[m+1];
        int[] q=new int[m+1];
        int i=1;
        while(i<=m){
            strs=sc.nextLine().split(" ");
            v[i]=Integer.parseInt(strs[0]);
            p[i]=Integer.parseInt(strs[1])*v[i];
            q[i]=Integer.parseInt(strs[2]);
            i++;
        }
        
        getResult(v,p,q,n,m);
    }
    
    public static void getResult(int[] v,int[] p,int[] q,int n,int m){
        int[][] res=new int[m+1][n+1];
        for (int i = 1; i <=m; i++) {
            for(int j = 1; j<=n; j++){
                if(q[i] == 0) { 
                    if(v[i] <= j){ 
                        res[i][j] = Math.max(res[i-1][j], res[i-1][j-v[i]] + p[i]);
                    }
                }else{ 
                    if(v[i] + v[q[i]] <= j){  
                        res[i][j] = Math.max(res[i-1][j], res[i-1][j-v[i]] + p[i]);
                    }
                }
            }
        }
        System.out.println(res[m][n]);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章