硬币翻转倍数递增试算

简介: //有何不足或者问题希望能够得到各位的多多指正,不胜感激 import java.util.Scanner;/** * * @author cc 举例 100枚硬币,最初全部朝下,第一次将所有硬币反转过来, 第二次反转位置是2的倍数的硬币, * 第三次反转3的倍数,.....执行一百次,问最终共有多少个硬币面朝上? * * 1.硬
//有何不足或者问题希望能够得到各位的多多指正,不胜感激   
 
 
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();
	}

}

目录
相关文章
|
4月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
45 0
|
7月前
假设你正在玩跳格子(所有格子排成一个纵列)游戏。需要 跳完n 个格子你才能抵达终点。 每次你可以跳 1 或 2 个格子。你有多少种不同的方法可以到达终点呢? 注意:给定 n 是一个正整数。
假设你正在玩跳格子(所有格子排成一个纵列)游戏。需要 跳完n 个格子你才能抵达终点。 每次你可以跳 1 或 2 个格子。你有多少种不同的方法可以到达终点呢? 注意:给定 n 是一个正整数。
|
7月前
|
算法 测试技术 C#
【滑动窗口】【差分数组】C++算法:K 连续位的最小翻转次数
【滑动窗口】【差分数组】C++算法:K 连续位的最小翻转次数
|
人工智能 算法 BI
【线段树】找最长“白色”线段
【线段树】找最长“白色”线段
74 0
|
存储 人工智能 算法
【前缀和】截断数组、K倍区间、激光炸弹
现在,要将该数组从中间截断,得到三个非空子数组。
87 0
|
C++
C/C++每日一练(20230503) 递增数串、缺失正数、最大矩形
C/C++每日一练(20230503) 递增数串、缺失正数、最大矩形
121 0
Leetcod 剑指offer 59 滑动区间最大值
Leetcod 剑指offer 59 滑动区间最大值
78 0
|
索引
每日一题—— 最小差值 I
每日一题—— 最小差值 I
169 0
每日一题—— 最小差值 I
LeetCode 1318. 或运算的最小翻转次数
LeetCode 1318. 或运算的最小翻转次数
|
Java
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
245 0
位移运算---为何负数不断地无符号向右移动的最小值是1呢?