C语言 计算选手的名次 详解
C语言 计算选手的名次 详解
我是JaYLove0589。
本着程序员互相学习的原则,
且因自己深受此题困扰,对递归函数的使用不熟练,所以发下面代码。
望大家指正。
题目描述:
5位选手参加100米决赛,教练员让5人据实力预测比赛结果。
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
决赛结果公布后,每位选手的预测都只说对了一半(即一对一错)。计算每位选手比赛实际名次。
特别说明:不是电脑判断出解,直接输出结果不计分。
输入:
输入 1
输出:
输出选手的排名。(所有测试数据在后台,输出格式是 A B C D E,字符之间以空格分隔,最后一个没有空格)
以下是我的代码:
//
// T3 计算选手的名次.c
// c 191226
//
// Copyright © 2019 JaYLove0589. All rights reserved.
//#include <stdio.h>int getRank(char *pplayer,const int QTY);
int judge(char *pplayer);int main(){scanf("1");const int QTY=5;//选手数量为5char player[QTY];//按排名的顺序存储的选手int find=getRank(player, QTY);//寻找是否有满足条件的选手排名if (find==1) {//若找到,输出选手排名for (int i=0; i<QTY; i++) {printf("%c",player[i]);if (i!=QTY-1) {printf(" ");}}} else {//若找不到printf("Not find");}printf("\n");return 0;
}int getRank(char *pplayer,const int QTY){//回溯法,若找到则继续找下一个排名的选手,若找不到则返回上一个选手char ch[5]={'A','B','C','D','E'};//5名选手:A、B、C、D、Estatic int count=0;//设置静态局部变量,count用于存储当前所查找的排名名次int flag=0;//flag用于判断选手是否重复for (int i1=0; i1<QTY; i1++) {//从选手A开始依次寻找for (int i=0; i<count; i++) {//判断该选手是否与前面排名内的选手重复if (pplayer[i]==ch[i1]) {flag=1;break;}}if (flag==1) {flag=0;continue;}pplayer[count]=ch[i1];//若找到不重复的选手,将选手存入当前排名count++;if (count==QTY) {//当找到5名选手时if (judge(pplayer)==1) {//判断是否满足条件return 1;} else {//不满足则返回倒数第二层循环count=count-2;return 0;}} else {if (getRank(pplayer, QTY)==1) {//进入下一层循环,寻找下一个排名的选手return 1;//如果已成功找到,后面的就不用做了,直接返回上一层循环}}}count--;//若找不到该排名的选手,则返回上一层循环return 0;
}int judge(char *pplayer){//写入各排名选手需要满足的条件if ((pplayer[1]=='B' && pplayer[2]!='A') || (pplayer[1]!='B' && pplayer[2]=='A')) {if ((pplayer[1]=='B' && pplayer[3]!='E') || (pplayer[1]!='B' && pplayer[3]=='E')) {if ((pplayer[0]=='C' && pplayer[1]!='D') || (pplayer[0]!='C' && pplayer[1]=='D')) {if ((pplayer[4]=='C' && pplayer[2]!='D') || (pplayer[4]!='C' && pplayer[2]=='D')) {if ( (pplayer[3]=='E' && pplayer[0]!='A') || (pplayer[3]!='E' && pplayer[0]=='A')) {return 1;}}}}}return 0;
}
ps:如果后期需要修改题目中的选手说话内容,则直接在judge()函数内修改即可。
ps:如果后期需要修改选手的数量,直接修改只读变量QTY的值以及getRank()函数内ch字符数组的大小及值即可。
-----------------分割线-----------------
如果发现我“太啰嗦”或代码“太垃圾”还请指出!!谢谢!!
求赞!比心心٩(๑>◡<๑)۶
以上。
C语言 计算选手的名次 详解相关推荐
- 大二c语言期末考试题库及详解答案,大学C语言期末考试练习题(带详解答案)...
<大学C语言期末考试练习题(带详解答案)>由会员分享,可在线阅读,更多相关<大学C语言期末考试练习题(带详解答案)(55页珍藏版)>请在金锄头文库上搜索. 1.一. 单项选择题 ...
- c语言 read 文件字节没超过数组大小时会怎样_剑指信奥 | C 语言之信奥试题详解(四)...
趣乐博思剑指信奥系列 ❝ 趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案.开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试题分析与详 ...
- R语言机器学习之caret包详解(一)
R语言机器学习caret包trainControl函数详解 R语言机器学习之caret包详解(一) 简介 数据预处理 各种数据变换 近零方差变量 创建虚拟变量 重抽样技术 k折交叉验证 留一交叉验证 ...
- c语言while将字符循环,C语言 while语句的用法详解
在C语言中,共有三大常用的程序结构: 顺序结构:代码从前往后执行,没有任何"拐弯抹角": 选择结构:也叫分支结构,重点要掌握 if else.switch 以及条件运算符: 循环结 ...
- 【C语言】扫雷小游戏详解
[C语言]扫雷小游戏详解 前言: 还记得大明湖畔的夏雨荷,电脑课上的扫雷吗? ---------------------------是 他 吗--------------------------- 没 ...
- 784-C语言rand和srand用法详解
C语言rand和srand用法详解 在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头 ...
- R语言可视化绘图基础知识详解
R语言可视化绘图基础知识详解 图形参数:字体.坐标.颜色.标签等: 图像符号和线条: 文本属性: 图像尺寸及边界: 坐标轴.图例自定义等: 图像的组合: #install.packages(c(&qu ...
- php函数find的用法,c语言find函数的用法详解
c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...
- python ks值计算_利用Python计算KS的实例详解
在金融领域中,我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布.好的信用风控模型一般从准确性.稳定性和可解释性来评估模型.sOf免费资源网 一般来说.好人样本的分布同坏人样本的分布应该是有很 ...
最新文章
- 让你的PHP更安全之PHP.ini
- oracle+创建序列自增,oracle序列详解和建立自增主键
- SQL 注入式攻击的本质
- 用户细分_基于购买历史的用户细分
- linux基础文件管理软硬链接
- 大数据-----软件开发模型(详细讲解)
- oracle 10g学习之分组函数
- json里面的list数据取不出来_sql盲注的困局:利用DNSlog快速导出数据
- 无锁并发的CAS为何如此优秀?
- 数值分析:插值与拟合
- 2019美赛B题PSO算法
- python爬虫微博24小时热搜_GitHub - Writeup007/weibo_Hot_Search: 微博爬虫:每天定时爬取微博热搜榜的内容,留下互联网人的记忆。...
- APP的原型制作流程
- CSS实现简单的3D旋转魔方
- PID控制器及其参数整定
- 致远互联发布的智慧协同新一代企业管理平台,新在哪里?
- epson l201 l200清零软件 中文版 l111 l101清零软件 L350 L353 清零软件
- Truck History POJ - 1789 最小生成树Prim
- 黑马程序员--IO总结(含2个设计模式)
- can not be named yunan because its located directly under the workspace root