1、题目要求,5个[1,21]区间的随机整数组成一注彩票, 5个数相互不重复且从大到小排序,生成五注彩票。
2、效果如下:
请耐心等待...
第1注:03 07 10 19 21
第2注:02 05 07 09 13
第3注:01 05 06 13 16
第4注:02 12 15 16 17
第5注:06 12 14 18 21
3、实现:首先生成五个[1,21]区间的随机整数,并把他们放到数组里面,然后判断这个数组中的元素是否重复,有重复的话重新生成五个[1,21]区间的随机整数,并把他们放到数组里面然后继续判断直到没有重复出现,最后进行升序排序并进行打印,以此方法打印五次。
4、函数
生成五个[1,21]区间的随机整数,并把他们放到数组里面。
srand(time(NULL));是以当前时间为种子,产生任意数。其中,time(NULL)用来获取当前时间。
因此每次获得随机数时需要延时一段时间,否则产生的五个随机数将一摸一样。
void get_five_ran_num(int *arr) {
int i;
srand(time(NULL)); //确定随机初值
for(i = 0;i < 5;i++) {
Sleep(200); //延时0.2秒
arr[i] = rand()%(21-1+1)+1;
}
}
判断这个数组中的元素是否重复,重复返回-1,不重复返回0
int find_same_element(int *arr,int length) {
int i,j,k;
for(i = 0;i < length-1;i++) { //arr[0]————arr[length-1]
for(j = i + 1;j < length;j++) {
if(arr[i] == arr[j]) { //数字重复
return -1;
}
}
}
return 0;
}
打印一注彩票。判断这个数组中的元素是否重复这个函数返回-1的话再次重新生成五个随机整数,然后继续判断,直到不重复返回0开始打印。
void printf_one_lottly(int *arr,int q) {
int i;
do get_five_ran_num(arr);
while(find_same_element(arr,5)); //只要返回-1就重新生成五个随机整数返回0就进行打印
sort(arr,5);
printf("第%d注:",q);
for(i=0;i<5;i++) {
printf("%02d ",arr[i]);
}
printf("\n");
}
最后进行升序排序(简单选择法)
第一次:i = 0,j = 1,将j从1到最后遍历一遍并分别与arr[0]进行比较,如果arr[0]大就向后交换,直到将最小的排到arr[0]。
第二次:i = 1,j = 2,将j从2到最后遍历一遍并分别与arr[1]进行比较,如果arr[1]大就向后交换,直到将后面最小的排到arr[1]。
以此类推......
得到从小到大排列的数组。
void sort(int *arr,int length) {
int i,j,temp;
for(i=0;i<length-1;i++) {
for(j=i+1;j<length;j++) {
if(arr[j] < arr[i]) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
}
5、全部代码如下
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void get_five_ran_num(int *arr);
int find_same_element(int *arr,int length);
void sort(int *arr,int length);
void printf_one_lottly(int *arr,int q);
int main() {
int arr[5] = {0};
int q = 1;
printf("请耐心等待...\n");
while(q<6) {
printf_one_lottly(arr,q);
q++;
}
return 0;
}
void printf_one_lottly(int *arr,int q) {
int i;
do get_five_ran_num(arr);
while(find_same_element(arr,5));
sort(arr,5);
printf("第%d注:",q);
for(i=0;i<5;i++) {
printf("%02d ",arr[i]);
}
printf("\n");
}
/************************************
* 功能: 获取5次[1,21]随机整数
* 参数: 无参数
* 返回值:无返回值
************************************/
void get_five_ran_num(int *arr) {
int i;
srand(time(NULL)); //确定随机初值
for(i = 0;i < 5;i++) {
Sleep(200); //延时0.2秒
arr[i] = rand()%(21-1+1)+1;
}
}
int find_same_element(int *arr,int length) {
int i,j,k;
for(i = 0;i < length-1;i++) { //arr[0]————arr[length-1]
for(j = i + 1;j < length;j++) {
if(arr[i] == arr[j]) { //数字重复
return -1;
}
}
}
return 0;
}
//升序排序
void sort(int *arr,int length) {
int i,j,temp;
for(i=0;i<length-1;i++) {
for(j=i+1;j<length;j++) {
if(arr[j] < arr[i]) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
}