c++ - 有没有更有效的方法来解决字谜问题

标签 c++ anagram

我正在尝试写出给定数字的所有字谜。我做到了,但是有没有更有效的方法来解决这个问题?或者我怎样才能用字母来做? 我正在尝试写出给定数字的所有字谜。我做到了,但是有没有更有效的方法来解决这个问题?或者我怎样才能用字母来做?

输入:1234

输出:

1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321

#include<iostream>
using namespace std;

int digitNumber(int);
bool isAnagram(int ,int  ); 
int reverse(int ); //reverse the number to know where it ends

int main()
{
    int nmbr;
    cin>>nmbr;

    int rev=reverse(nmbr);

    for(int i=0;i+nmbr<=rev;i++)// control the numbers
    {
        if(isAnagram(nmbr,i+nmbr))
        {
            cout<<i+nmbr<<endl;
        }
    }

}

int digitNumber(int number) // number of digit
{
    int digit=0;
    while(number>0)
    {
        digit++;
        number=number/10;
    }

    return digit;
}

bool isAnagram(int number,int number2)
{
    int arr[10]={0};
    int arr2[10]={0};

    int digit=digitNumber(number);
    if(digit!=digitNumber(number2)) //
    {
        return 0;
    }

    while(number>0) 
    {
        arr[number%10]++;
        number=number/10;
    }

    while(number2>0)
    {
        arr2[number2%10]++;
        number2=number2/10;
    }

    for(int i=0;i<10;i++)
    {
        if(arr[i]!=arr2[i])
        {
            return 0;
        } 
    }

    return 1;
}

int reverse(int number) // reverse the number
{
    int result=0;
    while(number>0)
    {
        result+=number%10;
        number=number/10;
        result=result*10;
    }
    return result/10;
}

最佳答案

嗯,如果我没理解错的话,你想打印一个数字的所有排列。应从 std::cin 中读取数字或其他内容。

WhozCraig 基本上也已经给出了答案。所有证书都交给他。 我不想被否决,因为我从 cppreference 示例代码中复制并粘贴。给我评论,我会删除这篇文章。也许我也误解了这个问题,因为它似乎太简单了。还有,请评论,我会删除这个答案。

答案取自here .

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::string s;  std::cin >> s;
    std::sort(s.begin(), s.end());
    do {
        std::cout << s << '\n';
    } while (std::next_permutation(s.begin(), s.end()));
    return 0;
}

关于c++ - 有没有更有效的方法来解决字谜问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56510800/

相关文章:

c++ - Qt:如何继承QQuickPath类

c++ - 定义默认的 int 为 unsigned int

c++ - 实例化模板函数时出现编译器错误

string - 字符串 2 的字谜是字符串 1 的子字符串

php - 使用 PHP 编写一个字谜函数?

java - 使用基本 Java 检查两个字符串是否是彼此的变位词

c++ - 如何在不递归的情况下找到所有可能的字谜?

c++ - 是否可以让一个 vector 指向其他 vector 的子集?

c++ - boost::unordered_multimap:有效地获取桶中的所有元素?

javascript - 快速字谜检查算法 (HackerRank)