c语言随机产生一个四位数的正整数,分别输出这四个数字,并且算出这四个数字能组成多少 个互不相同且无重复数字的三位数?分别都是多少? 说明:如果产生的四位数中有相 同的数字需要再次产生
时间: 2024-10-15 14:21:43 浏览: 35
两个数相加c语言
在C语言中,我们可以使用 `<time.h>` 库中的 `srand()` 和 `rand()` 函数来生成随机数,而为了确保每次运行程序都能得到新的随机数序列,我们需要在程序开始时初始化随机数种子,这里我们使用当前系统时间。
首先,我们要生成一个四位数的正整数,然后再处理组合成三位数的问题。以下是一个可能的实现方法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void generate_random_number() {
srand(time(0)); // 设置随机数种子
int number;
do {
number = rand() % 1000 + 1000; // 生成1000至9999之间的数
} while (number > 999 || has_duplicate_digits(number)); // 保证四位数且无重复
printf("生成的四位数: %d\n", number);
}
bool has_duplicate_digits(int num) {
static int digits[4]; // 用于存储四位数的每一位
int count = 0;
for (int i = 0; i < 4; i++) {
digits[count++] = num % 10; // 取百位、十位和个位
num /= 10;
}
for (int i = 0; i < 3; i++) { // 数字不能重复,所以只比较前三位
for (int j = i + 1; j < 4; j++) {
if (digits[i] == digits[j]) {
return true;
}
}
}
return false;
}
void calculate_unique_three_digit_combinations() {
int four_digit_num = generate_random_number();
printf("组成的三位数有:\n");
for (int i = 0; i < 4; i++) { // 对每个四位数的每位
for (int j = i+1; j < 4; j++) { // 排除重复的
int three_digit_num = digits[i] * 100 + digits[j] * 10 + digits[i+1]; // 构造三位数
printf("%d, ", three_digit_num);
}
}
printf("\n");
}
int main() {
while (true) {
generate_random_number();
calculate_unique_three_digit_combinations();
}
return 0;
}
```
注意:由于 `main` 循环不断运行,直到用户手动停止程序,以确保每次运行都会生成新的四位数并计算组合。
阅读全文