几个小题目 inC
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<stdio.h>#define WEIGHT1 5#define WEIGHT2 3#define WEIGHT3 2#define TOTALCANDIDATES 3//TODO 改进:并列第一名问题!main(){//分别存放各个候选人总票数(得分)int totalVotesOf = {0};//分别存放三种不同权重int weightsOf = {WEIGHT1, WEIGHT2, WEIGHT3};//一张票的三个char voteOf = {'\0'};//最多票数int maxVote = 0;//最多票数的足球先生的编号 a-->0 b-->1 c-->2int footballKingNo;int i,j;printf("请输入你的投票顺序(足球先生候选人有a,b,c三个,不能重复投票!例如:b,a,c)$,$,$结束投票!\n");//三个投票者分别为A B C投票while(1){scanf("%c,%c,%c", &voteOf, &voteOf, &voteOf);fflush(stdin);if(voteOf=='$') break;//结束投票//三张票必须不能重复if((voteOf != voteOf) && (voteOf != voteOf) && (voteOf != voteOf)){//根据每张选票的投票顺序给各个候选人累加票数for(j = 0; j < TOTALCANDIDATES; j++){int tem = voteOf - 'a';//得出候选人号码totalVotesOf += weightsOf;//给相应候选人累加票数}}elseprintf("警告:这次投票有错误投票,在结果中会将其过滤\n");}//统计投票结果printf("统计结果:\n\ta的票数为%d\n\tb的票数为%d\n\tc的票数为%d\n",totalVotesOf, totalVotesOf, totalVotesOf);for(i = 0; i < TOTALCANDIDATES; i++)if(maxVote<totalVotesOf) maxVote = totalVotesOf,footballKingNo = i;printf("本次的足球先生获得者为: %c先生!!!\n", footballKingNo + 'a');}
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<stdio.h>#include<stdlib.h>#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 = {0};int sortedIndex = {0};int sameBitsData = {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数值从大到小对应的下标分别存入sortedIndexfor(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 = maxIndex;}//按照sortedIndex存储的元素从大到小对应的index取出original的数值拼凑出最大值for(m = 0; m < N; m++)printf("%d",*(originalData + sortedIndex));printf("\n");//free(originalData);//free(sortedIndex);//free(sameBitsData);}
页:
[1]