3 条题解

  • 6
    @ 2022-8-26 14:29:15

    哈喽,递归类的问题来了~~~ 遇见递归类的问题不要想太复杂了,只要根据题目的规则来就可以了,具体他是怎么移动的,我们不需要细致的考虑。 如本题:题目很乱,只需要看一下算法思路。 算法思路:


    1.如果只有一个金片,则把该金片从源移动到目标棒,结束。

    if(n==1) cout<<a<<" To "<<c;


    2.如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒.

    else{
        f(n-1,a,c,b);  //将前n-1个金片移动到辅助棒B上面
        cout<<a<<" To "<<c;  //将自己移动到目标棒C上面(n-1个金片已经移动到B上了,则A棒就剩最大的那个了)
        f(n-1,b,a,c);  //将辅助棒B上剩余的n-1个金片移动到目标棒就可
    }
    

    主要的事情说三编,遇见递归不要细想,思路出来直接代码🤞

    题解不易,点个赞呗👍

    • 5
      @ 2023-8-8 15:29:53
      #include <iostream>
      using namespace std;
      int a, b, c, n;
      void abc(int n, char a, char b, char c)//注意这里是 char 类型。
      {
          if (n == 1)
          {
              cout << a << " To " << c << endl;//注意要换行。
              return;//这里不能 return 0;
          }
          abc (n - 1, a, c, b);
          cout << a << " To " << c << endl;
          abc (n - 1, b, a, c);
      }
      int main ()
      {
          int m;
          cin >> m;
          abc (m, 'A', 'B', 'C');//我们定义的是char类型的,所以要用 '' 不能用""。
      }
      

      第一次编写题解,写得不太好,编程水平也不高,请勿喷

      • -3
        @ 2023-8-1 20:00:05

        核心

        if(n==0)
                return;
            f(n-1,x,z,y);
            cout << x << " " << "To" << " " << y << endl;
            f(n-1,z,y,x);
        
        • 1

        信息

        ID
        222
        时间
        1000ms
        内存
        256MiB
        难度
        5
        标签
        递交数
        279
        已通过
        114
        上传者