zoukankan      html  css  js  c++  java
  • 九连环解决方法

    九连环的解决基本方法:想要改变某一个环的状态,须保证两点,第一,其前面一个环须是挂在横杆上,第二,更前面的环都没挂在横杆上,然后采用递推与递归的思想一步一步改变.

    首先:了解环的状态.

     从右往左数,第一个环定义为横杆之下(取下),第二个环定义为横杆之上(挂起),第三环为非正常状态(尽量不要弄成这样,如果已经这样,把右边的全部取下,再把这个取下呈横杆之下状态),第4/5个均为横杆之上状态

    其次:取下环的方法(以取下第5个环为例--当然,要取下第5个环,须得是第4个环在横杆之上,第1-3个环在横杆之下),步骤依次如下图1-5

     图1:第1-3个环在横杆之下,第4,5个环在横杆之上

     图2:取出第4个环,露出第5个环

     图3:取出第5个环,整个环都在横杆上方,不再是被横杆穿上的状态

     图4:把第5个环从横杆中间放下,同时穿上第4个环,最后第5,1-3个环均呈横杆之下状态,第4个环呈横杆之上状态

    最后:附上C++程序代码

    /*
    九连环的解锁原理:欲改变第N个环的状态,必须保证其前一个环挂在横杆上,更前一所有环均未挂在横杆上
    解决途径:递归. 
    */
    #include<iostream>
    using namespace std;
    int lh[10],xh;
    void cglh(int,int);
    int main()
    {
    	int cur,op,fp;
    	cout<<"请输入要处理环的序号:";
    	cin>>cur;
    	cout<<"\n请选择:1-挂上 2-取下 ";
    	cin>>op;
    	op%=2;
    	fp=(op+1)%2;
    	for(int i=cur;i>=1;i--)
    	{
    		cout<<"\n请输入第"<<i<<"个环的状态:(1-上面 0-下面)" ;
    		cin>>lh[i];
    	}
    	for(int i=cur;i>=1;i--)cglh(i,op); 
    	return 0;
     } 
     void cglh(int x,int f)
     {
     	if(lh[x]==f)return;
     	if(x>1)
     	{
    		cglh(x-1,1);
    	 	for(int i=x-2;i>=1;i--)
    	 		cglh(i,0);
    	 }
     	lh[x]=f;
     	xh++;
     	cout<<xh<<":";
     	if(f)cout<<"挂上第"<<x<<"个环\n";
    	 else  cout<<"取下第"<<x<<"个环\n";
     }
    

      程序说明:如果要取下九连环,那输入的要处理的环号就是9,然后选择取下,再后就是输入当前环的状态(全挂上的就全输入1)

    如有不足主不吝赐教,谢谢你的阅读!

     

  • 相关阅读:
    Linux终端以及bash
    初识VIM
    基础命令
    目录结构和命令
    Xshell连接Centos7.5和yum
    Linux的发展史和centos7的安装
    学习方法以及计算机硬件基础
    mysql、MariaDB的简单操作
    yum 软件管理器
    基础面试题
  • 原文地址:https://www.cnblogs.com/wendcn/p/15522392.html
Copyright © 2011-2022 走看看