閱讀457 返回首頁    go 微軟 go Office


硬幣翻轉倍數遞增試算

//有何不足或者問題希望能夠得到各位的多多指正,不勝感激   


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();
	}

}

最後更新:2017-04-03 12:53:45

  上一篇:go hi3531spi flash啟動和bootrom啟動的對比
  下一篇:go CCS編譯器load program為灰色