模拟景点投票案例
4个景点进行投票,一共80人,每人一票,投票采用随机数,如果出现平票则以故宫-长城-鸟巢-天安门的顺序进行优先选取
思路:选择结构体来存储景点的名字和得票数,起始都为0票,每有一人投,则票数加一,80人投完后,选取票数最大值输出
#include<stdlib.h> #include<stdio.h> #include<time.h> //定义结构体存储景点名和得票数 typedef struct vote { char name[100]; int votenum; }VT; int main() { //存入4个景点名,得票数起始都为0 VT spotArr[4] ={{"故宫",0},{"长城",0},{"鸟巢",0},{"天安门",0}}; int i; //定义最大值后续筛选最终选取的景点 int max = spotArr[0].votenum; //随机数的种子 //种子需设置在循环外,确保随机数种子只被设置一次。 //在循环内会导致每次迭代都重新设置随机数种子,导致每次生成的随机数可能是一样的。 srand(time(NULL)); for(i=1;i<=80;i++) { int num; //规定随机数范围为0-4 num = rand() % 4; //进行判断,随机数等于0代表故宫得票,以此类推 if(num == 0) { spotArr[0].votenum ++; } else if(num == 1) { spotArr[1].votenum ++; } else if(num == 2) { spotArr[2].votenum ++; } else { spotArr[3].votenum ++; } } //遍历各个景点得票数 for(i=0;i<4;i++) { printf("%s得票数为:%d\n",spotArr[i].name,spotArr[i].votenum); } //筛选出最高票数 for(i=0;i<4;i++) { if(max <= spotArr[i].votenum) { max = spotArr[i].votenum; } } //找出最高票数对应的景点 for(i=0;i<4;i++) { if(spotArr[i].votenum == max) { printf("最后决定的景点是:%s得票数为:%d\n",spotArr[i].name,spotArr[i].votenum); //以故宫-长城-鸟巢-天安门进行对比,当找到最高票数时直接跳出循环,不考虑后面的平票可能 break; } } return 0; }