1 条题解

  • 0
    @ 2023-6-11 12:16:29

    C++ :

    #include<iostream>
    using namespace std;
    
    char c[101];//存放棋子
    int sp;//存放--的起始位置
    int st;//记录移动的总步骤
    int n;//白旗的数量
    
    //打印棋子
    void print(){
    	int i;
    	cout<<"step"<<st<<":";
    	for(i = 1;i <=2 * n + 2;i++){
    		cout<<c[i];
    	}
    	
    	cout<<endl;
    	st++;
    } 
    
    //初始化棋盘
    void init(int n){
    	int i;
    	st = 0;
    	sp = 2 * n + 1;//-空格第一次所在的位置
    	
    	//设置白子
    	for(i = 1;i <= n;i++){
    		c[i] = 'o';
    	} 
    	
    	//设置黑子
    	for(i = n + 1;i <= 2 * n;i++){
    		c[i] = '*';
    	} 
    	
    	c[2 * n + 1] = '-';
    	c[2 * n + 2] = '-';
    	print();
    } 
    
    //k表示需要移动的棋子的起始位置
    void move(int k){
    	//空格放棋子 
    	c[sp] = c[k];
    	c[sp + 1] = c[k + 1];
    	
    	//棋子放空格 
    	c[k] = '-';
    	c[k + 1] = '-';
    	
    	//移动结束后,新的空格的位置就是原来棋子的位置
    	sp = k;
    	
    	print(); 
    } 
    
    //递归移动,剩余4个棋子特殊处理
    void mv(int n){
    	int i,k;
    	//只剩4个要特殊处理
    	if(n == 4){
    		move(4);
    		move(8);
    		move(2);
    		move(7);
    		move(1);
    	} else{
    		move(n);
    		move(2 * n - 1);
    		//n的数量减少1
    		mv(n - 1); 
    	}
    } 
    
    int main(){
    	cin>>n;
    	init(n);
    	mv(n);
    }
    
    • 1

    信息

    ID
    2165
    时间
    1000ms
    内存
    16MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者