复杂的C语言彩票系统代码
时间: 2023-12-22 11:04:58 浏览: 45
以下是一个复杂的C语言彩票系统代码,包含了更多功能和细节处理,仅供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM 33 // 彩票号码最大值
#define MIN_NUM 1 // 彩票号码最小值
#define NUM_COUNT 6 // 彩票号码个数
// 彩票号码结构体
typedef struct {
int nums[NUM_COUNT]; // 号码数组
} Lottery;
// 用户猜测结构体
typedef struct {
int nums[NUM_COUNT]; // 号码数组
} Guess;
// 中奖信息结构体
typedef struct {
int prize; // 奖项,0表示未中奖,1~3表示三等奖到一等奖
int prizeNums[NUM_COUNT]; // 中奖号码
} Result;
// 生成n个不重复的随机数
void generateRandomNums(int nums[], int n, int max, int min) {
int i, j, temp;
srand(time(NULL));
for (i = 0; i < n; i++) {
nums[i] = rand() % (max - min + 1) + min;
for (j = 0; j < i; j++) {
if (nums[i] == nums[j]) {
i--;
break;
}
}
}
}
// 输入n个不重复的整数
void inputUniqueNums(int nums[], int n, int max, int min) {
int i, j;
for (i = 0; i < n; i++) {
printf("第%d个号码:", i + 1);
scanf("%d", &nums[i]);
// 判断号码是否合法
if (nums[i] < min || nums[i] > max) {
printf("号码必须在%d~%d之间!\n", min, max);
i--;
continue;
}
// 判断号码是否重复
for (j = 0; j < i; j++) {
if (nums[i] == nums[j]) {
printf("号码不能重复!\n");
i--;
break;
}
}
}
}
// 比较两个号码数组,返回匹配的号码个数
int compareNums(int nums1[], int nums2[], int n) {
int i, j, count = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (nums1[i] == nums2[j]) {
count++;
break;
}
}
}
return count;
}
// 比较猜测的号码和彩票号码,返回中奖信息
Result checkGuess(Lottery lottery, Guess guess) {
Result result;
int match = compareNums(lottery.nums, guess.nums, NUM_COUNT);
if (match == 6) {
result.prize = 1;
} else if (match == 5) {
result.prize = 2;
} else if (match == 4) {
result.prize = 3;
} else {
result.prize = 0;
}
if (result.prize > 0) {
int i, j, count = 0;
for (i = 0; i < NUM_COUNT; i++) {
for (j = 0; j < NUM_COUNT; j++) {
if (guess.nums[i] == lottery.nums[j]) {
result.prizeNums[count] = guess.nums[i];
count++;
break;
}
}
}
}
return result;
}
// 输出彩票号码
void printLottery(Lottery lottery) {
int i;
printf("彩票号码:");
for (i = 0; i < NUM_COUNT; i++) {
printf("%d ", lottery.nums[i]);
}
printf("\n");
}
// 输出用户猜测
void printGuess(Guess guess) {
int i;
printf("您的猜测:");
for (i = 0; i < NUM_COUNT; i++) {
printf("%d ", guess.nums[i]);
}
printf("\n");
}
// 输出中奖信息
void printResult(Result result) {
if (result.prize == 0) {
printf("很遗憾,您没有中奖。\n");
} else {
printf("恭喜您中了%d等奖!\n", result.prize);
printf("中奖号码:");
int i;
for (i = 0; i < NUM_COUNT; i++) {
printf("%d ", result.prizeNums[i]);
}
printf("\n");
}
}
int main() {
Lottery lottery;
Guess guess;
Result result;
int mode;
printf("欢迎来到彩票系统!\n");
printf("请选择模式:\n");
printf("1. 生成彩票号码\n");
printf("2. 输入彩票号码\n");
printf("请选择模式(1或2):");
scanf("%d", &mode);
if (mode == 1) {
generateRandomNums(lottery.nums, NUM_COUNT, MAX_NUM, MIN_NUM);
printf("彩票号码已生成!\n");
} else if (mode == 2) {
printf("请按要求输入彩票号码:\n");
inputUniqueNums(lottery.nums, NUM_COUNT, MAX_NUM, MIN_NUM);
} else {
printf("无效的选择!\n");
return 0;
}
printLottery(lottery);
printf("请猜测%d个%d~%d之间的整数(不重复):\n", NUM_COUNT, MIN_NUM, MAX_NUM);
inputUniqueNums(guess.nums, NUM_COUNT, MAX_NUM, MIN_NUM);
printGuess(guess);
result = checkGuess(lottery, guess);
printResult(result);
return 0;
}
```
该代码通过定义结构体来存储彩票号码和用户猜测的号码,并通过函数来实现随机数生成、输入不重复整数、比较号码数组等功能。还实现了两种模式的彩票号码生成,以及输出中奖信息和中奖号码。同时,对输入的号码进行了合法性和重复性的判断,使程序更加健壮。