题目:随机产生四个1到4的整数且不能重复,并把数字保存到数组中
问题分析:根据题目我们可知,我们要随机的生成1到4这四个数字,且还不能重复。所以,我们在生成第一个数字的时候可以直接将这个数字保存到数组中,生成第二个数字之后,我们要那这个数字与第一个数字作比较,如果不同,则继续生成,如果重复了,就重新生成,直到与前面生成的数字不同为止。第三的随机数则要与前两个作比较,第四个随机数则要与前三个作比较。
因为要将数字保存到数组中,所以我们要定义一个数组。又因为每次都要生成不同的随机数,所以我们就要以时间作为生成随机数的种子。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int array[4] = {};//定义的一个空数组
srand(time(NULL));将时间设为种子
return 0;
}
因为我们生成的随机数要相互之间做比较,所以这随机数就要一边生成一边比较,所以就需要一个循环语句。又因为题目要求只生成四个不相同的随机数,所以说就有个数上的要求,所以我们在这里就可以使用一个for循环语句。因为第一个随机数字是可以直接存入数组中的,所以就有:
for(int i = 0; i < 4; i++){
int temp = rand() % 4 + 1;
if(i == 0){
array[i] = temp;//第一个数字,直接保存
}else{
}
}
在上一个步骤中,我们在 for 循环中定义了一个整型 i,且 i = 0 时生成第一个数字,且不需要作比较,就可以理解为,第一个数字要做比较的次数为0。生成第二个数字时 i = 1,且第二个数字要与第一个数字作比较,就可以看为,第二个数字要做比较的次数为1。由此,我们就可以推出 i 就是当前数字所需要作比较的次数,所以,我们就可以利用这个整型 i 来协助我们进行比较的这一步骤。
if(i == 0){
array[i] = temp;//第一个数字,直接保存
}else{
int j = 0;
for(;j < i; j++){
if(array[j] == temp){
break;
}
}
if(i == j){
array[i] = temp;
}else{
i--;//因为就算该数无效了,i 在for循环中还是会i++,且这个for循环中只有四次生成随机数的机会,为了防止随机数失效后浪费机会,所以在这里要i--
}
}
这一步完成了之后,我们就可以直接将数组中保存的数字一个一个的输出出来就完成了。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int array[4] = {};
srand(time(NULL));
for(int i = 0; i < 4; i++){
int temp = rand() % 4 + 1;
if(i == 0){
array[i] = temp;//第一个数字,直接保存
}else{
int j = 0;
for(;j < i; j++){
if(array[j] == temp){
break;
}
}
if(i == j){
array[i] = temp;
}else{
i--;
}
}
}
for(int i = 0; i < 4; i++){
printf("%d ",array[i]);
}
return 0;
}