蓝桥杯JAVA练习0215-BASIC24-26笔记

BASIC-24 龟兔赛跑预测

龟兔赛跑预测

好像去年做的时候印象深刻
所以先不着急
挑出几个特殊情况,比如路程比兔子领先休息的路程短
比如兔子休息完第一次乌龟也追不上,那乌龟永远追不上
……
然后我就不知道怎么写了
麻了
所以找了去年的代码来看
另辟蹊径
不用数学方法,时间按秒数自增
计算每时刻的路程变化
然后我发现有一个测试数据没通过
原因出现在兔子休息的计算过程
原方法是在兔子休息时乌龟路程增加,时间加快到兔子休息完毕
错误应该是乌龟的到达时间不准确
更改为从兔子休息的那一刻起,兔子突然减少自己休息时本应该走的路程,即兔子突然后退,在本该休息的时间再走到刚刚休息的地方

code
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int v1, v2, t, s, l;
		v1 = scanner.nextInt();
		v2 = scanner.nextInt();
		t = scanner.nextInt();
		s = scanner.nextInt();
		l = scanner.nextInt();
		//数学方法,不成功,放弃了
		/*
		 * if (l <= t) { if (v1 > v2) { System.out.println("R"); int time = l / v1;
		 * System.out.println(time); } else if (v1 < v2) { System.out.println("T"); int
		 * time = l / v2; System.out.println(time); } else { System.out.println("D");
		 * int time = l / v1; System.out.println(time); } } else if (v1 * (t / (v1 -
		 * v2)) > v2 * ((t / (v1 - v2)) + s)) { System.out.println("R"); int time = l /
		 * v1; System.out.println(time); }
		 */
		int s1 = 0, s2 = 0, time = 0;
		while (s1 < l && s2 < l) {
			s1 += v1;
			s2 += v2;
			time++;
			if (s1 == l || s2 == l) {
				break;
			}
			if (s1 - s2 >= t) {
				// s2 += v2 * s;跳过兔子休息时间
				// time += s;
				s1 -= v1 * s;
			}
		}
		if (s1 > s2) {
			System.out.println("R");
		} else if (s2 > s1) {
			System.out.println("T");
		} else {
			System.out.println("D");
		}
		System.out.println(time);
	}

}

BASIC-25 回形取数

回形取数
哈这道题我会
去年错过一万次了
所以很快写完
发现有好几个很长的样例出了问题,没有输出结果
更改长整型之后还是没有解决
最后对比去年的代码发现是已读数字占位出了问题
我写的是已读数字用“0”代替(讲道理应该没有问题因为都是正整数)
正确的是“-1”
所以就尝试改了一下
居然正确了
到现在也没找到原因,只能记住

code
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int m = scanner.nextInt();
		int n = scanner.nextInt();
		int a[][] = new int[m][n];
		int i, j;
		for (i = 0; i < m; i++) {
			for (j = 0; j < n; j++) {
				a[i][j] = scanner.nextInt();
			}
		}
		int x = 0, y = 0;
		int cnt = 0;
		while (cnt < m * n) {
			while (x < m && a[x][y] != -1) {
				System.out.print(a[x][y] + " ");
				a[x][y] = -1;
				cnt++;
				x++;
			}
			x--;
			y++;
			while (y < n && a[x][y] != -1) {
				System.out.print(a[x][y] + " ");
				a[x][y] = -1;
				cnt++;
				y++;
			}
			y--;
			x--;
			while (x >= 0 && a[x][y] != -1) {
				System.out.print(a[x][y] + " ");
				a[x][y] = -1;
				cnt++;
				x--;
			}
			x++;
			y--;
			while (y >= 0 && a[x][y] != -1) {
				System.out.print(a[x][y] + " ");
				a[x][y] = -1;
				cnt++;
				y--;
			}
			y++;
			x++;
		}
	}

}

BASIC-26 报时助手

报时助手
今天做的最简单的一道题
前20个用字符串数组存储
其他特殊情况摘出来单独讨论
为了减少重复代码,最好写个函数
需要注意的知识点
字符串数组赋值
很简单但是我老是错

String[] a = { "zero", "one", "two", "three", "four", "five",
				"six", "seven", "eight", "nine", "ten", "eleven",
				"twelve", "thirteen", "fourteen", "fifteen", 
				"sixteen", "seventeen", "eighteen", "nineteen", 
				"twenty" };

还要注意不要忘记介于20到30之间的数字的前半段和后半段

code
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int h = scanner.nextInt();
		int m = scanner.nextInt();

		if (m == 0) {
			read(h);
			System.out.print("o'clock");
		} else {
			read(h);
			read(m);
		}
	}

	public static void read(int t) {
		String[] a = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven",
				"twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty" };
		if (t > 0 && t <= 20) {
			System.out.print(a[t] + " ");
		} else if (t == 30) {
			System.out.print("thirty ");
		} else if (t == 40) {
			System.out.print("forty ");
		} else if (t == 50) {
			System.out.print("fifty ");
		} else {
			int num = t / 10;
			if (num == 2) {
				System.out.print(a[20] + " ");
			} else if (num == 3) {
				System.out.print("thirty ");
			} else if (num == 4) {
				System.out.print("forty ");
			} else if (num == 5) {
				System.out.print("fifty ");
			}
			System.out.print(a[t % 10] + " ");
		}
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值