【问题标题】:How does one change a number to letter using a modulus in this program?如何在该程序中使用模数将数字更改为字母?
【发布时间】:2014-06-17 02:11:11
【问题描述】:

最初,代码输出组合而不替换。可以在Combination without replacement C++找到它,我添加了当集合完成时从集合中减去一个的部分。例如,如果输入集合 {0, 1, 2, 3, 4} 中的 4 个组合,则输出将如下所示:

comb(N=从中选择的项目,K=设置数量)

梳子(N=5, K=4) ~ 输出 ~

0,1,2,3
0,1,2,4
0,1,3,4
0,2,3,4
1,2,3,4

⇓ 梳(N=5, K=4-1) ~ 输出 ~

0,1,2
0,1,3
0,1,4
0,2,3
0,2,4
0,3,4
1,2,3
1,2,4
1,3,4
2,3,4

⇓ 梳(N=5,K=(4-2) 或 (3-1)) ~ 输出 ~

0,1
0,2
0,3
0,4
1,2
1,3
1,4
2,3
2,4
3,4

⇓ 梳(5,K=(4-3) 或 (2-1)) ~ 输出 ~ 结束

如果想将数字更改为具有相同顺序的数字的字母,如何使用模数来做到这一点?有关如何执行此操作的任何其他想法?

我的尝试如下。

#include <iostream>
#include <string>
using namespace std;

void comb(int N, int K)
{
    std::string bitmask(K, 1);
    bitmask.resize(N, 0);

    do {
         for (int i = 0; i < N; ++i)

               {
                  if (bitmask[i])
                      std::cout << " " << i;
                  if (i == 0 || i%10 == 0)
                     std::cout << " " << "C" << endl;
                  else if (i == 1 || i%10 == 1)
                     std::cout << " " << "C#" << endl;
                  else if (i == 2 || i%10 ==1)
                     std::cout << " " << "D" << endl;

                  //the "else if" statements go up to i == 11 which is B//
               }
       } while (std::prev_permutation(bitmask.begin(), bitmask.end()));
} 
int main()
{
    for (int i = 6; i > 0; i--){
        comb(6,i);
        }
}

输出不太令人满意。

Sound
0C
1C#
2D
3D#
Sound
0C
1C#
2D
D# 
0C
1C#
2D
D#
0C
...

【问题讨论】:

  • 您能解释一下为什么需要使用模数吗?这是编程挑战吗?还是家庭作业?还是您只是觉得模数是一种方式?
  • 这是一个个人项目,所以我不需要以任何特定方式做任何事情。我真的认为模数(模数?)是一种选择。当你想到更好的方法时,如果你想把豆子洒出来,那就去吧。
  • 只是想指出,当 i=0 时 i%10=0,当 i=1 时 i%10=1。你不需要这样做:`(i==1)||(i%10==1)' 因为如果一个条件评估为真,另一个条件也必须评估为真(由于荒谬,真棒,疯狂等数学规则)。

标签: c++ algorithm combinations


【解决方案1】:

嗯,将0n 整数映射到另一种类型的经典方法是使用数组。

const std::string string_map[] =
{
    "C",  // instead of 0
    "C#", // instead of 1
    "D",  // instead of 2
    ....
}

然后在相同的代码中,而不是整数n,使用string_map[n]...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多