40分求助只过了6、7
查看原帖
40分求助只过了6、7
956190
SuperCheng楼主2023/3/7 21:29

刚接触算法,代码纯靠感觉写,只过了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;
}

谢谢大佬们

2023/3/7 21:29
加载中...