计蒜客练习

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_25605637/article/details/72545096

题目:跳跃游戏二

题目地址:https://nanti.jisuanke.com/t/20

AC代码:

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		int[] num = new int[110];
		int[] dp = new int[110];
		while (in.hasNextInt()) {
			int n = in.nextInt();
			for (int i=1; i<=n; i++) {
				num[i] = in.nextInt();
			}
			Arrays.fill(dp, 0);
			for (int i=1; i<=n; i++) {
				for (int j=1; j<=num[i]; j++) {
					if (i + j > n)
						continue;
					if (dp[i+j] > dp[i]+1 || dp[i+j] == 0) {
						dp[i+j] = dp[i] + 1;
					}
				}
			}
			System.out.println(dp[n]);
		}
	}

}


题目:无脑博士的试管们

题目地址:https://nanti.jisuanke.com/t/31

思路:3个水瓶之间互相倒,bug找的我心碎啊,不招了

错误代码:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	
	static int[][][] visit = new int[25][25][25];
	static int a,b,c;
	
	public static void main(String[] args) {
		
		int[] temp = new int[22];
		Scanner in = new Scanner(System.in);
		a = in.nextInt();
		b = in.nextInt();
		c = in.nextInt();
		dfs(0,0,c);
		int start = 0;
		for (int i=0; i<=b; i++) {
			for (int j=0; j<=c; j++) {
				if (visit[0][i][j] == 1) {
					temp[start] = j;
					start++;
				}
			}
		}
		Arrays.sort(temp,0,start);
		System.out.print(temp[0]);
		for (int i=1; i<start; i++) {
			System.out.print(" " + temp[i]);
		}
		System.out.println();
	}

	private static void dfs(int x, int y, int z) {
		if (visit[x][y][z] == 1)
			return;
		if (visit[x][y][z] == 0) {
			//System.out.println(x + " " + y + " " + z);
			visit[x][y][z] = 1;
		}
		/*将a中的倒向b*/
		//a将b倒满
		if (x >= b - y) {
			//System.out.println("a将b倒满");
			dfs(x-(b-y),b,z);
			//将a倒空
		} else if (x < b - y) {
			//System.out.println("a倒b,将a倒空");
			dfs(0,y+x,z);
		}
		/*将b中的倒向a*/
		//b将a倒满
		if (y >= a - x) {
			//System.out.println("b将a倒满");
			dfs(a,y-(a-x),z);
			//将b倒空
		} else if (y < a - x) {
			//System.out.println("b倒a,将b倒空");
			dfs(x+y,0,z);
		}
		/*将a中的倒向c*/
		//a将c倒满
		if (x >= c - z) {
			//System.out.println("a将c倒满");
			dfs(x-(c-z),y,c);
			//将a倒空
		} else if (x < c - z) {
			//System.out.println("a倒c,将a倒空");
			dfs(0,y,z+x);
		}
		/*将c中的倒向a*/
		//c将a倒满
		if (z >= a - x) {
			//System.out.println("c将a倒满");
			dfs(a,y,z-(a-x));
			//将c倒空
		} else if (z < a - x) {
			System.out.println("c倒a,将c倒空");
			dfs(x+z,y,0);
		}
		/*将b中的倒向c*/
		//b将c倒满
		if (y >= c - z) {
			//System.out.println("b将c倒满");
			dfs(x,y-(c-z),c);
			//将b倒空
		} else if (y < c - z) {
			//System.out.println("b倒c,将b倒空");
			dfs(x,0,z+y);
		}
		/*将c中的倒向b*/
		//c将b倒满
		if (z >= b - y) {
			//System.out.println("c将b倒满");
			dfs(x,b,z-(b-y));
			//将c倒空
		} else if (z < b - y) {
			//System.out.println("c倒b,将c倒空");
			dfs(x,y+z,0);
		}
	}

}


扫描二维码关注公众号,回复: 7204722 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_25605637/article/details/72545096