zoukankan      html  css  js  c++  java
  • 1771整数变换问题(搜索+剪枝)

    Description

    整数变换问题。关于整数i的变换f和g定义如下:f(i)=3i;
    试设计一个算法,对于给定的2 个整数n和m,用最少的f和g变换次数将n变换为m。例如,可以将整数15用4 次变换将它变换为整数4:4=gfgg(15)。当整数n不可能变换为整数m时,算法应如何处理?
    对任意给定的整数n和m,计算将整数n变换为整数m所需要的最少变换次数。

    Input

    输入数据的第一行有2 个正整数n和m。n≤100000,m≤1000000000。

    Output

    将计算出的最少变换次数以及相应的变换序列输出。第一行是最少变换次数。第2 行是相应的变换序列。

    Sample

    Input 

    15 4

    Output 

    4
    gfgg

    Hint

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int n, m, top;
     6 char re[105];
     7 
     8 int dfs(int cur, int step)
     9 {
    10     if(step > top) return 0;
    11     else
    12     {
    13         if(cur*3==m||dfs(cur*3, step+1))
    14         {
    15             re[step] = 'f';
    16             return 1;
    17         }
    18         else if(cur/2==m||dfs(cur/2, step+1))
    19         {
    20             re[step] = 'g';
    21             return 1;
    22         }
    23         return 0;
    24     }
    25 }
    26 
    27 int main()
    28 {
    29     int i;
    30     cin >> n >> m;
    31     top = 1;
    32     while(!dfs(n, 1))
    33     {
    34         top++;
    35     }
    36     cout << top << endl;
    37     for(i=top;i>=1;i--)
    38     {
    39         cout << re[i];
    40     }
    41     cout << endl;
    42     return 0;
    43 }
  • 相关阅读:
    c博客作业05--指针
    C博客作业04--数组
    C博客作业03--函数
    C博客作业02--循环结构
    C博客作业01--分支、顺序结构
    我的第一篇博客
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
  • 原文地址:https://www.cnblogs.com/0xiaoyu/p/14100626.html
Copyright © 2011-2022 走看看