用C语言验证命题:任何各位数字不全相同的三位正整数经以下变换后均能变为495,称495为三位整数的黑洞数。 变换步骤:对于任意一个各位数字不全相同三位正整数,将组成该整数的3个数字重新组合分别生成一个最大数和最小数,用最大数减去最小数得到一个新的三位数;再对新的三位数重复上述操作,最多重复7次。 编写程序,接收键盘输入的一个三位正整数,判断各位数字是否不全相同,若全相同重新输入,否则实施以上变换(不超过7次),输出每步变换后得到的三位整数。 【测试数据】 输入486时应输出:486 396 594 495 输入591时应输出:591 792 693 594 495 输入其他任意的三位数再做验证。
时间: 2023-05-17 14:07:28 浏览: 120
以下是用C语言实现的程序:
#include <stdio.h>
#include <stdlib.h>
int is_valid(int num) {
int digits[3];
digits[0] = num / 100;
digits[1] = (num / 10) % 10;
digits[2] = num % 10;
return digits[0] != digits[1] && digits[1] != digits[2] && digits[2] != digits[0];
}
int get_max(int num) {
int digits[3];
digits[0] = num / 100;
digits[1] = (num / 10) % 10;
digits[2] = num % 10;
int max = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == j) continue;
for (int k = 0; k < 3; k++) {
if (k == i || k == j) continue;
int new_num = digits[i] * 100 + digits[j] * 10 + digits[k];
if (new_num > max) {
max = new_num;
}
}
}
}
return max;
}
int get_min(int num) {
int digits[3];
digits[0] = num / 100;
digits[1] = (num / 10) % 10;
digits[2] = num % 10;
int min = 999;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == j) continue;
for (int k = 0; k < 3; k++) {
if (k == i || k == j) continue;
int new_num = digits[i] * 100 + digits[j] * 10 + digits[k];
if (new_num < min) {
min = new_num;
}
}
}
}
return min;
}
int main() {
int num;
do {
printf("请输入一个三位正整数:");
scanf("%d", &num);
} while (!is_valid(num));
printf("%d ", num);
int count = 0;
while (num != 495 && count < 7) {
int max = get_max(num);
int min = get_min(num);
num = max - min;
printf("%d ", num);
count++;
}
printf("\n");
return 0;
}
对于输入486,程序的输出为:486 396 594 495
对于输入591,程序的输出为:591 792 693 594 495
你可以输入其他任意的三位数进行验证。