刚接触算法,代码纯靠感觉写,只过了6、7,求大佬指点
#include <iostream>
#include <string>
#define ROM 1000
using namespace std;
//检查一个数字里面是否有重复的
bool checkint(int num) {
if (num / 100 == num / 10 % 10 || num / 10 % 10 == num % 100 % 10 || num / 100 == num % 100 % 10) return true;
return false;
}
//判断第二个和第三个数字中的每一个数字是否在第一个数字中出现
bool checkre(int num, int num1) {
string a = to_string(num);
string b = to_string(num1);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
if (a[i] == b[j])
return false;
}
return true;
}
//检查是否第二个和第三个数字是否是小数
bool checkf(float num) {
int n;
n = num;
if (num - n == 0) return false;
return true;
}
int main() {
//定义成浮点型一是为了防止用户输入小数,二是为了后面好判断是否为整数
float a, b, c;
int num[ROM],result[ROM], num1[ROM], num2[ROM], n = 0, n1 = 0, n2 = 0, n3 = 0;
bool judge = true;
cin >> a >> b >> c;
if (a > b || b > c || a > c ) return 0;
for (int i = 123; i <= 987; i++) {
if (!checkint(i)) {
num[n] = i;
n++;
}
}
for (int j = 0; j < n; j++)
{
//判断是否满足为整数和数字不重复
if (!checkf(b / a * num[j]) && !checkint(b / a * num[j]) && b / a * num[j] < 1000);
else continue;
if (!checkf(c / a * num[j]) && !checkint(c / a * num[j]) && c / a * num[j] < 1000);
else continue;
num1[n2] = b / a * num[j];
num2[n3] = c / a * num[j];
result[n1] = num[j];
n1++;
n2++;
n3++;
}
for (int k = 0; k < n1; k++) {
if (checkre(result[k], num1[k]))
if (checkre(result[k], num2[k]))
if (checkre(num1[k], num2[k])) {
cout << result[k] << " " << num1[k] << " " << num2[k] << endl;
judge = false;
}
}
if (judge) cout << "NO!!!";
return 0;
}
谢谢大佬们