这是我的问题。程序需要打印m和n之间的数字,这些数字有不同的数字。例如:m = 97,n = 104;输出:5.我似乎有问题通过比较数字并找到一种方法来检查是否有2个相同的数字。这是我迄今为止写的:
enter code here
#include <iostream>
using namespace std;
int main()
{
int m, n;
cout << "m=";
cin >> m;
cout << "n=";
cin >> n;
for (int i = m; i <=n; ++i)
{
if (i >= m && i <= n)
{
while (i > 0)
{
m=i%=10;
i/= 10;
cout << m;
}
}
}
system("pause");
return 0;
}
如果你能给我最简单的解决方案。谢谢你提前
答案 0 :(得分:0)
最好的方法是将其分为两部分。主要部分负责增加数字集(如果变量是整数,这是最简单的),第二部分是比较数字的每个部分,以查看是否重复了一个数字(最好以字符串形式完成)。
首先,我将定义负责确定该值是否具有所有不同数字的方法:
bool hasDistinctDigits(int m) {
string number = to_string(m);
for (string::size_type i = 0; i < number.size(); i++) {
for (string::size_type j = i + 1; j < number.size(); j++) {
if (number[i] == number[j]) return false;
}
}
return true;
}
这应该很容易理解。首先,我们需要将数字转换为字符串。然后我们使用2个循环来确定字符是否在更高的索引中重复。例如,对于数字102,它将比较以下几组:{1,0},{1,2},{0,2}
然后在main函数中,我会这样称呼它:
int main()
{
int m, n, matched = 0;
cout << "m=";
cin >> m;
cout << "n=";
cin >> n;
for (int current = m; current <= n; ++current){
if (hasDistinctDigits(current)) {
cout << current << " is distinct" << endl;
matched++;
}
}
cout << "Total Matched: " << matched << endl;
system("pause");
return 0;
}