阅读更多
1. 投票程序
【要求】设有代号为a.b.c的 三个 足球先生候选人,根据投票者在选票上 对他们编号的 填写顺序分别计分5~3~2.请编程从键盘上 输入投票人数及投票结果,统计他们的 得分,并输出那位当选足球 先生。
【注意】;若同一张票上写 有两个相同的代号,则显示“次票无效”,若最终前两名得分相同应显示“重新投票”,否则显示三个候选人得分并输出“祝贺X当选冠军!”。
例如
投票人数5
输入投票内容;
a b c
c b a
c a a 该票无效
c b a
b c a
三位候选人得分:
a:12
b:13
c:15
祝贺c当选冠军!
【提示】
数据可以用结构体数组,结构体成员包括代号、得分。或者采用二维数组,行方向对应一张投票,列方向对应个候选人得分。
==========================
#include #define WEIGHT1 5 #define WEIGHT2 3 #define WEIGHT3 2 #define TOTALCANDIDATES 3 //TODO 改进:并列第一名问题! main() { //分别存放各个候选人总票数(得分) int totalVotesOf[TOTALCANDIDATES] = {0}; //分别存放三种不同权重 int weightsOf[TOTALCANDIDATES] = {WEIGHT1, WEIGHT2, WEIGHT3}; //一张票的三个 char voteOf[TOTALCANDIDATES] = {'\0'}; //最多票数 int maxVote = 0; //最多票数的足球先生的编号 a-->0 b-->1 c-->2 int footballKingNo; int i,j; printf("请输入你的投票顺序(足球先生候选人有a,b,c三个,不能重复投票!例如:b,a,c)$,$,$结束投票!\n"); //三个投票者分别为A B C投票 while(1) { scanf("%c,%c,%c", &voteOf[0], &voteOf[1], &voteOf[2]); fflush(stdin); if(voteOf[0]=='$') break;//结束投票 //三张票必须不能重复 if((voteOf[0] != voteOf[1]) && (voteOf[1] != voteOf[2]) && (voteOf[0] != voteOf[2])) { //根据每张选票的投票顺序给各个候选人累加票数 for(j = 0; j < TOTALCANDIDATES; j++) { int tem = voteOf[j] - 'a';//得出候选人号码 totalVotesOf[tem] += weightsOf[j];//给相应候选人累加票数 } } else printf("警告:这次投票有错误投票,在结果中会将其过滤\n"); } //统计投票结果 printf("统计结果:\n\ta的票数为%d\n\tb的票数为%d\n\tc的票数为%d\n",totalVotesOf[0], totalVotesOf[1], totalVotesOf[2]); for(i = 0; i < TOTALCANDIDATES; i++) if(maxVote
2. 数组游戏
【要求】
设有n 个正整数(n<=20),将他们连成一排,组成一个最大的多位数。程序输入:n,程序 输出:n个 数连接成的 多位数。
【提示】
一下是设计思路
可以将 问题这样变化一下
比如 输入的是123、2、33、1006、12这样几个数字。
先找出最大的 数字的位数为4为,再将所有的 数字变成4位数:1230 2000 3300 1006 1200
然后进行排序:
3300 2000 1200 1006
这样将后面加上去的0去掉的序列不 就是最大数字吗?于是最大数字就是:
3 3 2 1 2 3 1 2 1 0 0 6
#include #include #define N 5 #define BITS 1000 //TODO 原始数据为零会造成死循环,没有动态申请合适的数组个数,需要手动改变N值 main() { // int N; // int i, j, k, l, m; // int * originalData; // int * sortedIndex; // int * sameBitsData; // printf("you want to imput how many integers?"); // scanf("%d",N); // originalData = (int *)calloc(N, sizeof(int)); // sortedIndex = (int *)calloc(N, sizeof(int)); // sameBitsData = (int *)calloc(N, sizeof(int)); int originalData [N] = {0}; int sortedIndex [N] = {0}; int sameBitsData [N] = {0}; int i, j, k, l, m; //获得原始数据,原始数据不能为零! for(i = 0; i < N; i++) scanf("%d",originalData + i); //根据原始数据位数将其规整化,全部变为四位存入sameBitsData数组 for(j = 0; j < N; j++) { //如果少于四位,则给这个数乘十倍,直到成为四位数 *(sameBitsData + j) = *(originalData + j); while(!(*(sameBitsData + j)/BITS))//TODO 原始数据为零会造成死循环 *(sameBitsData + j) *= 10; } //将sameBitsData数值从大到小对应的下标分别存入sortedIndex for(k = 0; k < N;k++) { int max = 0, maxIndex = -1; for(l = 0; l < N; l++) { if(*(sameBitsData + l) > max) max = *(sameBitsData + l),maxIndex = l; } *(sameBitsData + maxIndex) = -1;//已经选出,将其变为最小的避免下一次误当作最大值 sortedIndex[k] = maxIndex; } //按照sortedIndex存储的元素从大到小对应的index取出original的数值拼凑出最大值 for(m = 0; m < N; m++) printf("%d",*(originalData + sortedIndex[m])); printf("\n"); // free(originalData); // free(sortedIndex); // free(sameBitsData); }