看到一个翻硬币题目,想了半天,不得其解,遂搜之...
发现这个博文写了几种思路,惊叹此人算法如此之好!
此处把几种思路以Java实现,特此记录...
http://blog.csdn.net/jia_xiaoxin/archive/2008/08/30/2852389.aspx
题目:
一摞硬币共有m枚,每一枚都是正面朝上。取
下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们一起翻面后再放回原处。再取3枚,取4枚……直至m枚。然后再从这摞硬币最上
面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中的每一枚又都是正面朝上为止。例如,m为1时,翻两次即可。m为2时,翻3次即可;m为3
时,翻9次即可;m为4时,翻11次即可;m为5时,翻24次即可;…;m为30时,翻899次即可;…
输 入:
仅有的一个数
字
是这摞硬币的枚数m,0<m<1000。
输 出:
为了使这摞硬币中的每一枚又都是正面朝上所必
需翻的次数。
某单
元
格
输入:
30
某单元格等于:
899
思路:不管硬币的次序,只是记住每次的翻转和交换,硬币的初
始状态都是TRUE,每个COIN经过多伦的翻转后都变回TRUE,那么就求出了解,这是最简单的思路。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TurnCoin {
public static void turn(int m){
int turnTimes = 0;
boolean flag = false;
boolean[] coins = new boolean[m];
for(int i=0;i<m;i++){
coins[i] = true;
}
while(!flag){
for(int i=0;i<m;i++){
for(int j=0;j<(i+1)/2;j++){
boolean temp = coins[j];
coins[j] = !coins[i-j];
coins[i-j] = !temp;
}
if((i+1)%2 == 1){
coins[i/2] = !coins[i/2];
}
turnTimes = turnTimes + 1;
flag = true;
for(int n=0;n<m;n++){
if(coins[n] == false){
flag = false;
break;
}
}
if(flag){
break;
}
}
}
System.out.println(turnTimes);
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
turn(n);
}
}
待继....
分享到:
相关推荐
首先这些硬币全部正面朝上,第一次翻转最上面的一个,第二次把最上面的两个一起翻转,第三次把最上面的三个硬币一起翻转,...,第n次一起翻转所有的n个硬币,第n+1次再将第一个硬币翻转,...,第m次将最上面m%n个...
硬币翻转ppt动画,正面的内容经过翻转显示背面的内容,硬币翻转配合目录切换ppt乐趣动画模板。
2、有N个硬币(N为偶数)正面朝上排成一排,每次将N-1个硬币翻过来放在原位置,不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。设计程序让计算机把翻币的最简过程以及翻币次数输出(用*表示正面,O表示反面...
在桌面上有一排硬币,共N枚,每一枚硬币...现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1枚硬币(正面向上的被翻转为反面向上,反之亦然)。求一个最短的操作序列(将每次翻转N-1枚硬币成为一次操作)。
c语言经典算法之归纳算法。翻硬币。 编译软件:DEV C++5.
该算法使用贪心法翻硬币
采用一位数组的数据结构,代码精简,简单明了
这是属于归纳算法的程序设计,以经典的硬币翻转问题,希望能给他人带来一些借鉴和帮助 谢谢
不错的组合特效
用MFC实现画硬币 增加,减少硬币,包含C++的源代码及工程文件,
2、(E-step)估计每组实验是硬币A的概率(本组实验是硬币B的概率=1-本组实验是硬币A的概率)。分别计算每组实验中,选择A硬币且正面朝上次数的期望值,选择B硬币且正面朝上次数的期望值;3、(M-step)利用第三步...
投币夹硬币翻转动画单击以翻转硬币
翻硬币效果 用javascript开发。
翻动基于硬币翻转网络应用程序
完整的识别程序,识别图像中硬币个数,检测出硬币的存在。
这是一个可以给头像的添加翻转动画的 demo , 做到了 一个翻转,循环翻转,每一面的不同点击事件监听
Create React App入门该项目是通过。可用脚本在项目目录中,可以运行:yarn start 在开发模式下运行应用程序。 打开在浏览器中查看。 如果进行编辑,页面将重新加载。 您还将在控制台中看到任何棉绒错误。...
9枚硬币问题使用的是3*3的矩阵,假设在一个4*4的矩阵中放置了16枚硬币。该问题可进一步变化为如2*3,2*4,3*4等等...2.修改硬币翻转规则,如规则改为对角线上的邻居被翻转,或者任意自定义的翻转规则。重新解决上述问题
掷硬币 具有各种数据可视化功能的简单有趣的硬币翻转。
小明将1角的硬币放成一摞,将5角的硬币硬币放成一摞,将1元的硬币放成一摞,发现3摞硬币一样高。银行正好把这些硬币换成若干张面值为10元的纸币。问小明至少带了多少钱的硬币(元为单位),每种面值的硬币有多少个?...