C语言 只能用一维数组解决 ,机产生50个0到6的数字,先输出,再要求组成不能重复的四位数,第二位不能为三,第一位不能比第三位大,最后一位数只能为偶数,最后将产生的数再次输出,如果有多余的,将多余的删除,用计数的方式,详细讲解,并给出代码
时间: 2023-10-03 18:09:15 浏览: 67
好的,让我来解答你的问题。
首先,C语言可以用一维数组来解决这个问题。我们可以使用rand()函数来产生50个0到6的随机数,然后将它们存储在一个数组中。
接着,我们需要遍历数组并输出每个随机数。代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int numbers[50];
// 产生50个0到6的随机数
for (int i = 0; i < 50; i++) {
numbers[i] = rand() % 7;
}
// 输出随机数
printf("产生的随机数:\n");
for (int i = 0; i < 50; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
```
接下来,我们需要组成不能重复的四位数。首先,我们需要找到符合条件的数字。代码如下:
```c
int count = 0;
int results[50];
for (int i = 0; i < 50; i++) {
for (int j = 0; j < 50; j++) {
for (int k = 0; k < 50; k++) {
for (int l = 0; l < 50; l++) {
if (i != j && i != k && i != l && j != k && j != l && k != l && numbers[i] != 3 && numbers[k] >= numbers[i] && numbers[l] % 2 == 0) {
int result = numbers[i] * 1000 + numbers[j] * 100 + numbers[k] * 10 + numbers[l];
results[count++] = result;
}
}
}
}
}
```
在上面的代码中,我们使用了四重循环来找到符合条件的数字,并将它们存储在另一个数组中。我们使用了一个计数器来记录符合条件的数字的数量。
接下来,我们需要输出这些数字。代码如下:
```c
printf("符合条件的数字:\n");
for (int i = 0; i < count; i++) {
printf("%d ", results[i]);
}
printf("\n");
```
最后,我们需要删除多余的数字。代码如下:
```c
int length = count;
for (int i = 0; i < length; i++) {
for (int j = i + 1; j < length; j++) {
if (results[i] == results[j]) {
for (int k = j; k < length - 1; k++) {
results[k] = results[k + 1];
}
length--;
j--;
}
}
}
printf("去重后的数字:\n");
for (int i = 0; i < length; i++) {
printf("%d ", results[i]);
}
printf("\n");
```
在上面的代码中,我们使用了两重循环来删除重复的数字。我们首先使用一个变量来记录数字的数量,然后遍历数组,如果找到重复的数字,则将后面的数字向前移动,并将数字的数量减少1。
完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int numbers[50];
// 产生50个0到6的随机数
for (int i = 0; i < 50; i++) {
numbers[i] = rand() % 7;
}
// 输出随机数
printf("产生的随机数:\n");
for (int i = 0; i < 50; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
// 组成四位数
int count = 0;
int results[50];
for (int i = 0; i < 50; i++) {
for (int j = 0; j < 50; j++) {
for (int k = 0; k < 50; k++) {
for (int l = 0; l < 50; l++) {
if (i != j && i != k && i != l && j != k && j != l && k != l && numbers[i] != 3 && numbers[k] >= numbers[i] && numbers[l] % 2 == 0) {
int result = numbers[i] * 1000 + numbers[j] * 100 + numbers[k] * 10 + numbers[l];
results[count++] = result;
}
}
}
}
}
// 输出符合条件的数字
printf("符合条件的数字:\n");
for (int i = 0; i < count; i++) {
printf("%d ", results[i]);
}
printf("\n");
// 删除重复的数字
int length = count;
for (int i = 0; i < length; i++) {
for (int j = i + 1; j < length; j++) {
if (results[i] == results[j]) {
for (int k = j; k < length - 1; k++) {
results[k] = results[k + 1];
}
length--;
j--;
}
}
}
// 输出去重后的数字
printf("去重后的数字:\n");
for (int i = 0; i < length; i++) {
printf("%d ", results[i]);
}
printf("\n");
return 0;
}
```
希望能帮助到你!
阅读全文