几个小题目 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 #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 数连接成的 多位数。

【提示】

一下是设计思路

可以将 问题这样变化一下

比如 输入的是123233100612这样几个数字。

先找出最大的 数字的位数为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); }

你可能感兴趣的:(C,C++,C#,J#,游戏)