c++ - 有没有更有效的方法来解决字谜问题
问题描述
我正在尝试写出给定数字的所有字谜。我做到了,但有没有更有效的方法来解决这个问题?或者我怎么能用字母来做呢?我正在尝试写出给定数字的所有字谜。我做到了,但有没有更有效的方法来解决这个问题?或者我怎么能用字母来做呢?
输入: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 示例代码中复制和粘贴。给我评论,我会删除这篇文章。也许我也误解了这个问题,因为它似乎很容易。另外,请发表评论,我将删除此答案。
答案取自这里。
#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;
}
推荐阅读
- php - 通过 .htaccess 检查 URL 中的 get 参数
- javascript - 根据 EJS 中的选择对象下载文件
- gradle - 截至 2018-06,是否有 AspectJ 的官方 gradle 插件?
- javascript - React 检测跨多个文件的变量变化
- pg-promise - pg-promise 加入带有承诺结果的数组
- javascript - 用于计算购物车总价值的 Google 跟踪代码管理器自定义 javascript 变量
- javascript - 提示时出现 Javascript 猜测列表
- javascript - 使用 aria-live 在 vue.js 中向屏幕阅读器宣布信息
- python - 使用 pandas 的特定列的频率
- python-3.x - Discord.py 如何让机器人打印出它有多少成员?另外,我如何让我的机器人获取用户所说的内容?