b场景算法题(Java实现)

<一>、字母倒着输出

题目描述:

给定一组字符串,然这组字符串中的字母按照倒着的顺序输出,空格保留。

例如:

  输入:

    i am a student

  输出:

    student am i

代码如下:

import java.util.Scanner;

public class Main4 {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		String str = in.nextLine();
		String[] strs = str.split(" ");
		
		StringBuffer sb = new StringBuffer();
		for(int i = strs.length - 1;i >= 0;i--) {
			sb = sb.append(strs[i]).append(" ");
		}
		System.out.println(sb.toString());
	}

}

 <二>寻找最小数的字串

题目描述:

给定一组数组,用逗号分隔,求得到这组数组中数组成的最小数字。

例如:

  输入:

    21,321

  输出;

    21321

代码如下:

package com.ymm.core.b;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main2 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String[] strs = str.split(",");
        
        printNum(strs);

    }
    
    private static void printNum(String[] strs) {
        
        ArrayList<String> list = new ArrayList<>();
        for(String s : strs) {
            list.add(s);
        }
        
        Collections.sort(list,new Comparator<String>() {

            @Override
            public int compare(String s1, String s2) {
                String str1 = s1 + s2;
                String str2 = s2 + s1;
                return str1.compareTo(str2);
            }

        });
        StringBuffer sb = new StringBuffer();
        for(String j : list) {
            sb.append(j);
        }
        System.out.println(sb.toString());
    }

}

 <三>背包问题

题目描述
有为N件物品,它们的重量w分别是w1,w..,wn,它们的价值v分别是1.,.....,每件物品数量有且仅有一个, 现在给你个承重为M的背包,求背包里装入的物品具有的价值最大总和?
输入描述:

物品数量N=5件

重量W分别为:2 2 6 5 4

物品价值为:3 6 9 5 6

背包数量为:10

输出描述:

最大价值为:18

代码如下:

package com.ymm.core.b;

import java.util.Scanner;

public class Main1 {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
        
		int N = in.nextInt(); //物品的数量
		
		int W = in.nextInt(); //背包的容量
        
        int[] weight = new int[N + 1];//物品的重量

		int[] value = new int[N + 1];//物品的价值
        
        for(int i = 1;i <= N;i++) {
			weight[i] = in.nextInt();
		}
        
        for(int i = 1;i <= N;i++) {
			value[i] = in.nextInt();
		}
        
        
        int[][] maxVal = new int[N + 1][W + 1]; // 最大价值
		int[] a = new int[N + 1];//判断
        
		for(int i =1;i <= W;i++) {
			for(int j = 1;j <= N;j++) {
				if(i >= weight[j]) {
					 //f[i][j] = max(f[i-1][j], f[i-1][j-Vi] + Wi)
					//Vi表示第i件物体的体积,Wi表示第i件物品的价值。这样f[i-1][j]代表的就是不将这件物品放入背包
					//而f[i-1][j-Vi] + Wi则是代表将第i件放入背包之后的总价值,比较两者的价值,
					//得出最大的价值存入现在的背包之中
					maxVal[j][i] = Math.max(maxVal[j - 1][i - weight[j]] + value[j],
								maxVal[j - 1][i]);
				}else{
					//前j个物体
					maxVal[j][i] = maxVal[j - 1][i];
				}
			}
		}
		int n = W;
		for(int i = N;i > 0;i--) {
			if(maxVal[i][n] == maxVal[i - 1][n]) {
				a[i] = 0;
			}else {
				a[i] = 1;
				n = n - weight[i];
			}
		}
	
		System.out.println("取得最大价值:" + maxVal[N][W]);
	}

}

 

   

 

posted @ 2019-08-21 14:35  离愁i  阅读(340)  评论(0编辑  收藏  举报