2013-05-21 回答
是否還須要改善?
追问:
要改善,请看清楚题目,最后解释给我看
追答:
繼續改善本團團員廖東伯的回答:
import java.util.Scanner;
public class MaxSubMin1 {
static Scanner cin=new Scanner(System.in);
static boolean equalDigit(int[] d) {
int a=d[0];
for(int i=1; i<4; i++) { if(a!=d[i]) return false; }
return true;
}
static void split(int x, int[] d) {
// 同前
}
static int join(int[] d) {
// 同前
}
static void sort(int[] d) {
// 同前
}
static void reverse(int[] d, int e[]) {
// 同前
}
//------------------------------------
static boolean query() {
System.out.print("input a 4-digit number: ");
int x=cin.nextInt();
int[] d=new int[4]; int[] e=new int[4];
split(x, d);
if(equalDigit(d)) {
System.out.println("all 4 digits are equal");
return false;
}
else {
int step;
for(step=1; step<=7; step++) {
split(x, d);
sort(d);
reverse(d, e);
int res=join(e)-join(d);
x=res;
//System.out.print(" --> "+ res);
if(x==6174) break;
}
System.out.println("step: "+step);
return true;
}
}
static void check(int x0) {
int x=x0;
int[] d=new int[4]; int[] e=new int[4];
for(int i=1; i<=7; i++) {
split(x, d);
sort(d);
reverse(d, e);
int res=join(e)-join(d);
x=res;
}
if(x!=6174) {
System.out.println("fail on "+x);
}
}
static void proof() {
int[] d=new int[4];
for(int x=1000; x<9999; x++) {
if(x%1000==0) System.out.print(x+" ");
split(x, d);
if(! equalDigit(d)) {
check(x);
}
}
System.out.println("\nall 4 digit numbers are checked!");
}
public static void main(String[] args) {
proof();
while(true) {
if(! query() ) break;
}
}
}
补充:
解說:
boolean equalDigit(int[] d) 若四個數字都相等就true, 否足則為false
void split(int x, int[] d) 將四位數x拆成四個數字
int join(int[] d) 將四個數字組成四位數
sort(int[] d) 將四個數字排成由小到大
reverse(int[] d, int e[]) 將d中的四個數字以逆序抄入e中.
补充:
query() 要求輸入四位數,
若全同就印"all 4 digits are equal" (並傳回false)
否則就印出要幾步才變成 6174 (並傳回true)
check(int x0) 檢查x0是否在7步之內變成 6174
proof() 對1000~9999跳掉全同的數, 其它調用check加以檢驗.
main(String[] args) 首先調用 proof 證明都通過檢驗.
然後提供手動查詢[變成 6174的步數]. 持續進行直到輸入四位相同的數才聽停
补充:
運行情況如下:
1000 2000 3000 4000 5000 6000 7000 8000 9000
all 4 digit numbers are checked!
input a 4-digit number: 6471
step: 1
input a 4-digit number: 1234
step: 3
input a 4-digit number: 2222
all 4 digits are equal
补充:
本團隊已完成此問題,請採納,感謝