题库练习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]);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值