提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
俩到经典题目
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、不要二
题目描述
解题分析
这其实是一个数学问题:
简化题目条件可知: (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ==4,都是整数
有如下四种情况:
1+3=4 (y1-y2)*(y1-y2)不可能等于3
3+1=4 (x1-x2)*(x1-x2)不可能等于3
2+2=4 (y1-y2)(y1-y2)不可能等于2 , (x1-x2)(x1-x2)不可能等于2
0+4=4
4+0=4
得知满足的条件有俩个分别
(x1-x2)(x1-x2)=0 ,(y1-y2)(y1-y2)=4
(x1-x2)(x1-x2)=4 ,(y1-y2)(y1-y2)=0
最终结论:
x1=x2 ,y1-y2=2或者y1=y2,x1-x2=2;
我们定义一个二维数组,初始化为0,将不满足条件的格子,置为1,统计为0的格子。注意当遍历到为值1的位置时,应该直接跳过格子,不能再进行判定修改。
代码演示
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int w = scanner.nextInt();
int h = scanner.nextInt();
int[][]array = new int[w][h];
int count = 0;
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
if (array[i][j] == 0) {
count++;
if (i + 2 < w) {
array[i + 2][j] = 1;
}
if (j + 2 < h) {
array[i][j + 2] = 1;
}
}
}
}
System.out.println(count);
}
}
二、字符串转成整数
题目描述
解题分析
输入的有三种可能性+…,-…,有非法字符
如果是+,-需要记录下来,并再最后的结果做出相应的运算变成正数(正负号处理)
非法的数字返回0(非法字符)
题目说输入的结果可能为空,要对str判空处理(空字符串)
核心逻辑
合法的字符串变成整型公式:sum=sum*10+str[i]-‘0’
代码演示
按照如上思路
第一次提交代码
public class Solution {
public int StrToInt(String str) {
if (str == null || str.length() == 0) {
return 0;
}
int flag = 1;
if (str.charAt(0) == '-') {
flag = -1;
}
if (str.charAt(0) == '+') {
flag = 1;
}
int sum = 0;
for (int i = 0; i < str.length() ; i++) {
//判断是否是合法字符
if (str.charAt(i) < '0' || str.charAt(i) > '9') {
sum = 0; //题干说非法返回0
break;
}
sum = sum * 10 + str.charAt(i) - '0';
}
return sum * flag;
}
}
bug分析
+,-操作事实上也是合法操作,不能直接break,并返回0,
最开始这样改的:
修改第一个字符为0,就可以进入循环,当i为0的时候,不影响sum的判定,i++,后续操作正常
但是string是被final修饰的,不能通过charat(i)来改变字符串
这里就需要用到数组的存储了
第二次提交代码
public int StrToInt(String str) {
char chs[] = str.toCharArray();
if (chs == null || chs.length == 0) {
return 0;
}
int flag = 1;
if (str.charAt(0) == '-') {
flag = -1;
chs[0] = '0'; //注意这里一定是字符0,才能不影响sum的值
}
if (str.charAt(0) == '+') {
flag = 1;
chs[0] = '0'; //注意这里一定是字符0,才能不影响sum的值
}
int sum = 0;
for (int i = 0; i < str.length() ; i++) {
//判断是否是合法字符
if (chs[i] < '0' || chs[i] > '9') {
sum = 0; //题干说非法返回0
break;
}
sum = sum * 10 + chs[i] - '0';
}
return sum * flag;
}
字符串变整型
字符串转换成整型核心逻辑:sum=sum10+str[i]-‘0’*