牛牛找数
题目描述
牛牛有两个数a和b,他想找到一个大于a且为b的倍数的最小整数,只不过他算数没学好,不知道该怎么做,现在他想请你帮忙。
给定两个数a和b,返回大于a且为b的倍数的最小整数。
示例1
输入
3,2
返回值
4
说明
大于3且为2的倍数的最小整数为4。
我的代码不太行,后来发现只要一个式子就能解决!
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 给定两个数a和b,返回大于a且为b的倍数的最小整数。
* @param a int整型 代表题目中描述的a
* @param b int整型 代表题目中描述的b
* @return int整型
*/
public int solve (int a, int b) {
// write code here
if(a % b == 0) return a + b;
else return (a / b + 1) * b;
}
}
牛牛与三角形
题目描述
牛牛想从n个数中找出三个数来组成一个三角形,只不过牛牛想知道在所有的三角形的组成中,周长最大的三角形的周长减去周长最小的三角形的周长是多少?
牛牛不能够解决该问题,所以他想请你帮忙,给定n个数,返回在所有合法的三角形的组成中,周长最大的三角形的周长 减去 周长最小的三角形的周长的值。
题目保证每组测试数据中都存在有三个数可以构成三角形,保证答案在int范围内。
示例1
输入
3,[2,2,2]
返回值
0
说明
只有一种组成方法,所以结果为0。
import java.util.*;
import java.util.Arrays;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回在所有合法的三角形的组成中,最大的三角形的周长减去最小的三角形的周长的值
*
* @param n int整型 代表题目中的n
* @param a int整型一维数组 代表n个数的大小
* @return int整型
*/
public int solve(int n, int[] a) {
if (n != a.length || n < 3) {
return -1;
}
if (n == 3) {
return 0;
}
Arrays.sort(a);
int minL = findMinLength(a);
int maxL = findMaxLength(a);
return maxL - minL;
// write code here
}
private int findMinLength(int[] a) {
for (int i = 0; i < a.length - 2; i++) {
if (a[i] + a[i + 1] > a[i + 2]) {
return a[i] + a[i + 1] + a[i + 2];
}
}
return 0;
}
private int findMaxLength(int[] arr) {
for (int i = arr.length - 1; i >= 2; i--) {
if (arr[i - 2] + arr[i - 1] > arr[i]) {
return arr[i - 2] + arr[i - 1] + arr[i];
}
}
return 0;
}
}
通过了62%???
下面的代码AC:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回在所有合法的三角形的组成中,最大的三角形的周长减去最小的三角形的周长的值
* @param n int整型 代表题目中的n
* @param a int整型一维数组 代表n个数的大小
* @return int整型
*/
public int solve (int n, int[] p) {
// write code here
Arrays.sort(p);
int max=0;
int min=Integer.MAX_VALUE;
int l = p.length;
//在从小到大的序列中
// 对于 i j k i<j<k
//如果 a[i]+a[j]>a[k]
//则i的前面也可能存在 一个 h 满足 a[h]+(a[i] || a[j]) >a[k] 即周长更小
//例如 1 2 4 4 4
for(int i = 0;i<=l-3;i++){
for(int j = i+1;j<=l-2;j++ ){
if(p[i]+p[j]>p[j+1]) {
min = Math.min(p[i]+p[j]+p[j+1],min);
break;
}
}
}
//在从小到大的序列中同理
//在倒序序列中
//对于找最大周长来说,如果a[low]+a[low-1]<a[high] 则就没有必要再向前移动low
//因为前面的都比a[low]小
for(int i=l-1;i>=2;i--){
if(p[i-2]+p[i-1]>p[i]) {
max = Math.max(p[i]+p[i-1]+p[i-2],max);
break;
}
}
return max-min;
}
}
牛牛和网格三角形
牛牛有一个长和高都为为\mathit nn的网格三角形,牛牛想从从左下角点走到右上角点,但是牛牛只能向上或者向右沿着网格的边走,牛牛想知道从左下角点走到右上角点的方案数的奇偶性。牛牛现在给你\mathit nn,请你告诉牛牛路径方案数的奇偶性,若是奇数返回true,若是偶数返回false。
示例1
输入
“5”
返回值
false
import java.util.*;
import java.math.BigInteger;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param n string字符串 三角形的长和高
* @return bool布尔型
*/
public boolean judge (String n) {
//String m = n.substring(1,n.length()-2);
BigInteger a = new BigInteger(n);
if(a.and(a.add(BigInteger.ONE)).equals(BigInteger.ZERO))
return true;
return false;
}
}