//有何不足或者問題希望能夠得到各位的多多指正,不勝感激
import java.util.Scanner;
/**
*
* @author cc 舉例 100枚硬幣,最初全部朝下,第一次將所有硬幣反轉過來, 第二次反轉位置是2的倍數的硬幣,
* 第三次反轉3的倍數,.....執行一百次,問最終共有多少個硬幣面朝上?
*
* 1.硬幣正反使用數組 1、0表示,1表示正面,0表示反面;
*
*
* 100枚硬幣的結果
int[] == 1100100001000000100000000100000000001000000000000100000000000000100000000000000001000000000000000000
result coin about 1 nums = 10
*/
public class CoinTurn {
private static int[] intCoins;
public static void main(String[] args) {
// TODO Auto-generated method stub
int coinNum = inputNum();
intCoins = new int[coinNum];
/*
* 初始化
*/
for (int i = 0; i < intCoins.length; i++) {
intCoins[i] = 0;// 初始化全部朝下,即背面0
}
doTurnCoin();
int resutltCoin = getCoinNum();
System.out.println("result coin about 1 nums = " + resutltCoin);// 輸出最終正面朝上的個數
}
private static void doTurnCoin() {
/*
* 翻轉操作
*/
for (int i = 1; i < intCoins.length; i++) {// 確定倍數
for (int j = i - 1; j < intCoins.length; j++) {// 循環翻轉
if (j % i == 0) { // 硬幣序列數是當前次數的倍數,則翻轉
if (intCoins[j] == 0) {
intCoins[j] = 1;
} else {
intCoins[j] = 0;
}
}
}
}
}
private static int getCoinNum() {
int countNum = 0;// 記錄最終硬幣正面個數
StringBuffer strB = new StringBuffer();
for (int a : intCoins) {
strB.append(a + "");
if (1 == a)
countNum++;
}
System.out.println("int[] == " + strB);// 輸出數組的結果
return countNum;
}
/*
* coin number
*/
private static int inputNum() {
System.out.println("input coin num: ");
Scanner input = new Scanner(System.in);
return input.nextInt();
}
}