Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';我不理解使用此地图背后的证据<&燃气轮机;方法_C++ - Fatal编程技术网

C++ Can';我不理解使用此地图背后的证据<&燃气轮机;方法

C++ Can';我不理解使用此地图背后的证据<&燃气轮机;方法,c++,C++,德拉齐尔正在和瓦尔达玩数学游戏 让我们将正整数x定义为其 数字。例如,f(135)=1!*3! * 5! = 720 首先,他们选择一个由n个数字组成的十进制数a 包含至少一个大于1的数字。这个数字可能是 从前导零开始。然后,他们应该找到最大正值 满足以下两个条件的x号: x既不包含数字0也不包含数字1 =f(x)=f(a) 帮助朋友找到这样的号码 输入第一行包含一个整数n(1 ≤ N ≤ 15) -号码 a中的数字 第二行包含a的n个数字。中至少有一个数字 一个大于1的值。数字a可能包含前导零

德拉齐尔正在和瓦尔达玩数学游戏

让我们将正整数x定义为其 数字。例如,f(135)=1!*3! * 5! = 720

首先,他们选择一个由n个数字组成的十进制数a 包含至少一个大于1的数字。这个数字可能是 从前导零开始。然后,他们应该找到最大正值 满足以下两个条件的x号:

  • x既不包含数字0也不包含数字1

  • =f(x)=f(a)

  • 帮助朋友找到这样的号码

    输入第一行包含一个整数n(1 ≤ N ≤ 15) -号码 a中的数字

    第二行包含a的n个数字。中至少有一个数字 一个大于1的值。数字a可能包含前导零

    输出满足条件的最大可能整数 在上面此十进制数字中不应有0和1 代表性

    示例
    输入
    4
    1234
    输出
    33222

    输入
    3
    555
    输出
    555

    这是解决办法

    #include <bits/stdc++.h>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
      map<char, string> mp;
    
      mp['0'] = mp['1'] = "";
      mp['2'] = "2";
      mp['3'] = "3";
      mp['4'] = "223";
      mp['5'] = "5";
      mp['6'] = "35";
      mp['7'] = "7";
      mp['8'] = "2227";
      mp['9'] = "2337";
    
      int n;
      string str;
    
      cin>>n>>str;
    
      string res;
    
      for(int i = 0; i < str.size(); ++i)
        res += mp[str[i]];
    
      sort(res.rbegin(), res.rend());
    
      cout<<res;
    
      return 0;
    }
    
    #包括
    
    #包括

    这些转换背后的理论如下(以4为例):

    较长的数字序列总是比较短的序列(至少对于正整数)产生较大的数字。因此,在可能的情况下,此代码生成更长的序列。通过上述示例,我们得到:

    4! = 3! * 4
    
    我们不能减少3!再进一步,因为3是素数。另一方面,4只是2²:

    4 = 2² = 2! * 2!
    
    因此,我们找到了数字序列中4的最佳替换为“322”。所有的数字都可以这样做,但素数是不可分解的,因此素数本身永远是最好的替代品


    由于我们使用素因子分解,我们也知道我们只有(并且可能最长的)可以替换某个数字的数字串。

    我认为解释中缺少了一些位。“让我们将正整数x定义为其数字的阶乘的乘积。例如,.”不能真正理解这句话,看起来缺少示例。后来,“2.=f(x)=f(a)”,什么是f?在第一个等号之前似乎还缺少一些东西。抱歉,我编辑了它@jdehesa似乎引用了删除了文本的这一部分我似乎无法理解这一部分:4!=3! * 2! * 2.我们是从哪里得出这个结论的!是3!*2! * 2.举个例子6!是5!*3!<代码>4!=4 * 3 * 2 = 2 * 2 * 3 * 2 = 2! * 2! * 3!(顺序不重要,因为我们将在之后进行排序)这是一个简单的数学事实。由于
    f(x)
    的定义,我们可以在不改变
    f(x)
    结果的情况下对每个数字执行此操作。这些都是预先计算好的。我有点理解@jdehesa 6!=6*5*4*3*2表示6!=3*2*5*4*3*2这意味着6!=3! * 5.我同意6!=3*2*5*4*3*2,那不是应该是6吗!=2! * 3! * 5.这将反过来转化为235,而不仅仅是35?或者我只是遗漏了一些东西。@jdehesa你可以很容易地用计算器来测试,但无论如何你必须考虑
    2!*3! * 5! = 另一方面,2*3*2*5*4*3*26*5*4*3*2=3*2*5*4*3*2
    2将在计算中引入另一个2,导致不正确的结果。
    
    4 = 2² = 2! * 2!