呃,感觉代码太长了,但是暂时还没找到更好的办法。尤其是flag标志位,总觉得太多了,应该有更好的办法,暂时没思路。
方法一:
直接判断。
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n <= 1000) {
int index, a1, a2, count1, count2, temp, count3;
boolean flag1, flag2, flag3, flag4, flag5;
flag1 = flag2 = flag3 = flag4 = flag5 = false;
double a4 = 0.0;
index = a1 = a2 = count1 = count2 = count3 = temp = 0;
DecimalFormat df = new DecimalFormat("#.0");
int[] number = new int[n];
for (index = 0; index < n; index++) {
int b = sc.nextInt();
if (b > 1000) {
return;
} else {
number[index] = b;
if (number[index] % 5 == 0 & number[index] % 2 == 0) {
a1 += number[index];
flag1 = true;
}
if (number[index] % 5 == 1) {
if (count3 % 2 == 0) {
a2 += number[index];
} else {
a2 -= number[index];
}
flag2 = true;
count3++;
}
if (number[index] % 5 == 2) {
count1++;
flag3 = true;
}
if (number[index] % 5 == 3) {
a4 += number[index];
count2++;
flag4 = true;
}
if (number[index] % 5 == 4) {
if (temp < number[index]) {
temp = number[index];
flag5 = true;
}
}
}
}
if (flag1) {
System.out.print(a1);
} else {
System.out.print("N");
}
if (flag2) {
System.out.print(" " + a2);
} else {
System.out.print(" N");
}
if (flag3) {
System.out.print(" " + count1);
} else {
System.out.print(" N");
}
if (flag4) {
System.out.print(" " + df.format(a4 / count2));
} else {
System.out.print(" N");
}
if (flag5) {
System.out.print(" " + temp);
} else {
System.out.print(" N");
}
}
}
}
方法二:
用switch判断。
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n <= 1000) {
int index, a1, a2, count1, count2, temp, count3;
index = a1 = a2 = count1 = count2 = count3 = temp = 0;
boolean flag1, flag2, flag3, flag4, flag5;
flag1 = flag2 = flag3 = flag4 = flag5 = false;
double a4 = 0.0;
DecimalFormat df = new DecimalFormat("#.0");
int[] number = new int[n];
for (index = 0; index < n; index++) {
int b = sc.nextInt();
if (b > 1000) {
return;
} else {
number[index] = b;
int m = number[index] % 5;
switch (m) {
case 0:
if (number[index] % 2 == 0) {
a1 += number[index];
flag1 = true;
}
break;
case 1:
if (count3 % 2 == 0) {
a2 += number[index];
} else {
a2 -= number[index];
}
flag2 = true;
count3++;
break;
case 2:
count1++;
flag3 = true;
break;
case 3:
a4 += number[index];
count2++;
flag4 = true;
break;
case 4:
if (temp < number[index]) {
temp = number[index];
flag5 = true;
}
break;
}
}
}
if (flag1) {
System.out.print(a1);
} else {
System.out.print("N");
}
if (flag2) {
System.out.print(" " + a2);
} else {
System.out.print(" N");
}
if (flag3) {
System.out.print(" " + count1);
} else {
System.out.print(" N");
}
if (flag4) {
System.out.print(" " + df.format(a4 / count2));
} else {
System.out.print(" N");
}
if (flag5) {
System.out.print(" " + temp);
} else {
System.out.print(" N");
}
}
}
}
遗问:我还没研究为什么方法二反而比方法一费时。理论上方法一是对每一个数字做5次判断,方法二则是只做一次判断,即判断m,为什么判断次数变少了,时长反而增加了。
更新:
我发现方法二中自己漏了default,加了以后效率就变高了,果然方法二比方法一效率要高。
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n <= 1000) {
int index, a1, a2, count1, count2, temp, count3;
index = a1 = a2 = count1 = count2 = count3 = temp = 0;
boolean flag1, flag2, flag3, flag4, flag5;
flag1 = flag2 = flag3 = flag4 = flag5 = false;
double a4 = 0.0;
DecimalFormat df = new DecimalFormat("#.0");
int[] number = new int[n];
for (index = 0; index < n; index++) {
int b = sc.nextInt();
if (b > 1000) {
return;
} else {
number[index] = b;
int m = number[index] % 5;
switch (m) {
case 0:
if (number[index] % 2 == 0) {
a1 += number[index];
flag1 = true;
}
break;
case 1:
if (count3 % 2 == 0) {
a2 += number[index];
} else {
a2 -= number[index];
}
flag2 = true;
count3++;
break;
case 2:
count1++;
flag3 = true;
break;
case 3:
a4 += number[index];
count2++;
flag4 = true;
break;
case 4:
if (temp < number[index]) {
temp = number[index];
flag5 = true;
}
break;
default:
break;
}
}
}
if (flag1) {
System.out.print(a1);
} else {
System.out.print("N");
}
if (flag2) {
System.out.print(" " + a2);
} else {
System.out.print(" N");
}
if (flag3) {
System.out.print(" " + count1);
} else {
System.out.print(" N");
}
if (flag4) {
System.out.print(" " + df.format(a4 / count2));
} else {
System.out.print(" N");
}
if (flag5) {
System.out.print(" " + temp);
} else {
System.out.print(" N");
}
}
}
}
搜索
复制