硬幣翻轉倍數遞增試算
//有何不足或者問題希望能夠得到各位的多多指正,不勝感激
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