题一完美立方问题
题目描述:
解题代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sacn =new Scanner(System.in);
int n=sacn.nextInt();
for(int a=2;a<=n;a++){
for(int b=2;b<a;b++){
for(int c=b;c<a;c++){
for(int d=c;d<a;d++){
if(Math.pow(a,3)==Math.pow(b,3)+Math.pow(c,3)+Math.pow(d,3)){
System.out.printf("Cube=%d,Triple=(%d,%d,%d)\n",a,b,c,d);
}
}
}
}
}
}
}
算法思路:没什么思路解题就行
题目二:生理周期
题目描述:
解题代码:
import java.util.Scanner;
public class 生理周期 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int p,e,i,d;
int num=0;
while (scanner.hasNext()) {
p = scanner.nextInt();
e = scanner.nextInt();
i = scanner.nextInt();
d = scanner.nextInt();
int k ;
++num;
for (k = d + 1; (k - p) % 23 != 0; ++k) ;
for (; (k - e) % 28 != 0; k += 23) ;
for (; (k - i) % 33 != 0; k += 23 * 28) ;
int m = k - d;
System.out.println("第" + num + "个实例:" + m);
}
}
}
注意事项:
1.++i和i++的区别,前者先加一在进行运算,后者先进行运算在加一
2.for循环在这里的作用:for循环的新用法,思维不要局限在for(i=0;i<n;i++)上,for循环在这里起的作用:既有判断加之变量的变化,神奇
算法思想:
先检验体力的日子,然后找体力和情商重合的日子,在找重合的日子的时候,变化条件变成+23;最后再找三者重逢的日子,变化条件变成了+23*28(23和28的公倍数)
题目三:称硬币
题目描述:
解题代码:
package 第三天;
import java.util.Scanner;
public class 称硬币 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String[][] right = new String[4][4];
//String [][] left=new String[3][7];
//String [][] result=new String[3][7];
while (n-- > 0) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
right[i][j] = scanner.next();
}
}
for (char c = 'A'; c < 'L'; c++) {
String s = String.valueOf(c);
if (isFake(right, s, true)) {
System.out.println(s + " is the fake coin and it is light");
break;
} else if (isFake(right, s, false)) {
System.out.println(s + " is the fake coin and it is heavy");
break;
}
}
}
}
static boolean isFake(String[][] right, String s, boolean ligth) {
String pright = null;
String pleft = null;
//String result=null;
for (int i = 0; i < 3; i++) {
// pright=right[i][0];
// pleft=right[i][1];
// result=right[i][2];
if (ligth) {
pleft = right[i][0];
pright = right[i][1];
} else {
pleft = right[i][1];
pright = right[i][0];
}
switch (right[i][2]) {
case "up":
if (pleft.contains(s))
return false;
break;
case "even":
if (pright.contains(s) || pleft.contains(s))
return false;
break;
case "down":
if (pright.contains(s))
return false;
break;
}
}
return true;
}
}
注意事项:
1.while(n-->),它的意思是循环n次,除了最常用的 for (int i = 0; i < n; ++i) {...} 之外,还可以写 while (n-- > 0) {...} 和 while (--n >= 0) {...}。
2.isfake函数在前面要加上static关键字,原因:mian()方法是静态方法,而自己定义的那个方法如果不加static是成员方法,成员方法无法在静态方法中调用
算法思想:
解决此题的方法是先用一个二维数组存取输入的三次称量的情况,right[称量的次数][左边砝码的情况,右边砝码的情况,结果],然后枚举所有的砝码,先判断塔是不是轻的,然后调用isFake函数,isFake函数有三个参数,二维数组,验证的砝码代码,是否为轻。反之则砝码是重的
isFake函数:light 为true时,砝码是假的,且为轻,为false时砝码是假的,且是重的。先用两个指针代表左边砝码情况和右边砝码情况,假设是轻的然后进行判断,反之是重的然后进行判断。