java保龄球计分_TDD练习:保龄球计分
前言
培训遗留作业,计划放在国庆空闲时间做,所以这算是走计划节奏。另外,真的是不喜欢做这些题,虽然实现以后发现很简单。但是没实现之前,多少还是觉得有些困难,可能是自己做题太少(不知道别人做题时候啥感觉)。。另外,做这些题我是感觉完全搭不上算法的边,可能是我自己没专门学过的原因吧,基本上纯粹是按照题的说明需求,然后自己思考,整理思路,然后实现...过程就是这样。
保龄球计分
(题目摘自网络,反正都一个规则)
打保龄球是用一个滚球去撞击10个站立的瓶,将瓶击倒。一局分10轮,每轮可滚球1 次或多次,以击到的瓶数为依据计分,一局得分为10轮得分之和,而每轮的得分不仅与本轮的滚球情况有关,还可能与后一轮或两轮的滚球情况有关,即:某轮某次滚球击倒的瓶数不仅要计入本轮得分,还可能会计入前一轮或两轮得分。
计分规则具体如下:
① 若某一轮的第一次滚球就击倒全部10个瓶,则本轮不再滚球(若是第10轮还需加2次滚球),该轮得分为本次击倒瓶数10与以后2次滚球所击倒瓶数之和。
② 若某一轮的第一次滚球未击倒全部10个球,则对剩下未击倒的瓶再滚球一次,如果这2次滚球击倒全部10个瓶,则本轮不再滚球(若是第10轮还需加1次滚球),该轮得分为这2次击倒瓶数10与以后1次滚球所击倒瓶数之和。
③ 若某一轮2次滚球未击倒全部10个瓶,则本轮不在滚球,该轮得分为这2次滚球所击倒瓶数之和。
编写一个程序,统计各轮得分和累积总分。
Input:
输入数据是文本格式,共1行(字符串),有最多22个[0,10]之间的整数,表示每轮滚球第一次或第二次记到的秋熟,输入数据保证合法,两个整数间仅有一个空格。
Output:
自定义。对外接口为Calcscore(const char *s);
实现思路
计算每轮单独得分,十轮累加得总分。每轮单独得分,按规则可以大致总结出,如果议论中首次全中或者两次补中,则相当于第一次滚球后连续加后面两次;否则,只加后面一次。直接看代码吧,按照TDD方式,先写测例,再快速实现,最后的抽象实在不知道怎么抽象,估计是仅仅实现了功能,代码质量还相当欠缺,后续看下别人实现,再来做修改。
/* test.cpp */
#include
extern int Calcscore(const char *s);
void main()
{
assert(Calcscore("10 10 10 10 10 10 10 10 10 10 10 10") == 300);
assert(Calcscore("10 10 10 7 2 9 1 8 1 8 2 10 9 1 10 8 2") == 192);
assert(Calcscore("1 4 4 5 6 4 5 5 10 0 1 7 3 6 4 10 2 8 6") == 133);
}
/* bowling.cpp */
#include
#include
typedef struct _context
{
const char *s;
int pos;
}Context;
int Record[10];
bool Is_STRIKE(int score)
{
return score == 10;
}
int Parsescore(Context &ctx,int offset)
{
int temp_score = 0;
if (ctx.s[ctx.pos] == ' ')
{
ctx.pos++;
}
return atoi(ctx.s + ctx.pos + offset);
}
int CalcscorePerRound(Context &ctx)
{
int offset = 0;
int curr_score = 0;
int next_score = 0;
int round_score = 0;
curr_score = Parsescore(ctx,0); // 0表示解析分数的起始偏移
if (Is_STRIKE(curr_score))
{
offset = 2;
next_score = Parsescore(ctx,offset);
ctx.pos += 2; // 本轮STRIKE,下一轮击球开始解析的位置
}
else
{
offset = 0;
ctx.pos++;
next_score = Parsescore(ctx,offset);
ctx.pos++; // 本轮SPARE,下一轮击球开始解析的位置
}
// 本轮计分
if (10 > (curr_score + next_score)) // 本轮两次击球未全中
{
round_score = curr_score + next_score;
}
else // 本轮STRIKE或两次补中
{
int third_score = Parsescore(ctx,offset);
round_score = curr_score + next_score + third_score;
}
return round_score;
}
int Calcscore(const char *s)
{
Context ctx = {s,0};
int total_score = 0;
printf("每轮得分:\n");
for (int i = 0; i < 10; i++)
{
Record[i] = CalcscorePerRound(ctx);
printf("%-2d ",Record[i]);
total_score += Record[i];
}
printf("\n累计总分:%d",total_score);
printf("\n+++++++++++++++++++++++++++++++++\n");
return total_score;
}
总结
领域规则抽象,思考了N久,真心就是(臣妾做不到啊...)。如果仅仅就为实现功能而写的代码,再进行重构抽象,现在感觉好难。只能是多看高质量代码,多积累,多练习了!
相关文章
总结
以上是编程之家为你收集整理的TDD练习:保龄球计分全部内容,希望文章能够帮你解决TDD练习:保龄球计分所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250
java保龄球计分_TDD练习:保龄球计分相关推荐
- java写一个程序给保龄球比赛计分的程序
thoughwork思沃学院的题,还想看看能不能提前去心仪的公司体会下结对编程顺便感受下公司气氛,可是提交的时候发现代码写错了,要求用的是函数我却没用,提交总是出问题,好难过,还不想改,也改不对,毕竟 ...
- 排球计分系统java_排球计分系统|网世技术排球计分系统下载v1.0官方版 - 欧普软件下载...
排球计分系统是一款免费的排球比赛计分软件,采用五局三胜制,可以准确的记录双方的得分情况,包括犯规.球员信息.全队得分等信息,支持多种设备输出,是日常排球比赛计分的好工具,有需要的朋友可以来本站下载! ...
- 用python编写一个篮球计分系统_篮球计分系统的设计
1. 设 计思想和设计说明 (1). 设计思想: 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检 测日新月益更新. 在实时检测和自动控制的单片机应用系统中, 单片机往往是 ...
- 【JAVA】保龄球记分游戏
最近遇到一个保龄球记分的Game题目,回来查找了一下资料,现将代码拿出来共享.(代码的一切版权归原作者所有) 题目: 保龄球规则阐述: 保龄球是一种比赛,比赛者把一个哈密瓜大小的球顺着一条窄窄的球道 ...
- 从 保龄球得分计算方法 浅析 深度学习
起因 周六被小伙伴拖去游泳,美名其曰:锻炼身体.其实某人就是去泡澡的,哈哈.说正题吧,游完泳在体育场里闲逛,里面很大,转着转着看到一个保龄球馆,怀着对未知事物的好奇,决定和某人去尝试一下.我和S同学一 ...
- 7779 - KKT基本算法304保龄球340
目录 题目 题解 思路 规则解析 "奠基" 选择思路 读取数据 处理数据 完整代码 写在后面 题目 7779 - KKT基本算法304保龄球340 难度级别:A: 运行时间限制:1 ...
- 洛谷 P1166 打保龄球
P1166 打保龄球 题目描述 打保龄球是用一个滚球去打击十个站立的柱,将柱击倒.一局分十轮,每轮可滚球一次或多次,以击倒的柱数为依据计分.一局得分为十轮得分之和,而每轮的得分不仅与本轮滚球情况有关, ...
- 涛涛打保龄球 【map】篝火晚会(两道题)
涛涛打保龄球 目录 [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [代码] 2. 题目描述 输入格式 输出格式 输入输出样例 输入 #1 输出 #1 说明/提示 代码 (今天的 ...
- NPDP产品经理小知识:平衡计分卡(二)
NPDP产品经理小知识:平衡计分卡(二) [平衡计分卡的优点] 平衡计分卡不仅是一种管理手段,也体现了一种管理思想: (1)只有量化的指标才是可以考核的:必须将要考核的指标进行量化. (2)组织愿景的 ...
- 基于平衡计分卡框架设计DevOps战略
尽管有那么多关于DevOps的宣传,却稀有人写关于正式的DevOps策略. DevOps计划更多的是开始于工具上的探讨,并在技术上停滞不前. 较大的愿景极少被讨论. 本文的目的是为大型和小型企业提供创 ...
最新文章
- fft快速傅利叶变的C实现
- 1、play编程基础
- R7-1 正整数A+B (15 分)
- leetcode 179 python
- oracle备份恢复之rman恢复到异机(二)
- windows本地运行sentinel
- 删除mysql数据库_安装/删除MySQL数据库
- java邻接表无向图的创建_无向图的邻接表创建以及图的深度和…
- unity3d中XML文件报错原因的解决方案
- [sipdroid]3CX voip 服务器的搭建教程---个人实践版
- Navicat 中文破解版
- javascript中继承的几种方式
- 7-3 统计学生成绩 (15 分)
- CSS入门教程——HTML选择器
- 计算机控制不恒定性,计算机控制-习题答题.doc
- 解决TypeError: Converting circular structure to JSON
- ssh登录极路由后台_使用小米路由3G,让普通打印机变成网络打印机
- 利用canvas制作时钟表
- 阵列信号DOA估计系列(二).导向矢量与空间FFT(附代码)
- 华为的系统鸿蒙怎么样,华为鸿蒙2.0来了,这些功能比安卓iOS好用!
热门文章
- 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题(2012年度笔试面试八十题)
- linux Ubuntu系统安装百度aip
- AR技术和VR技术的区别是什么?
- 蓝桥杯真题——第39级台阶
- java dojo,针对 Java 开发人员的 Dojo 概念
- python eml解析_使用 python eml-parser 对 eml文件进行格式化
- linux查看网络连接命令,linux查看网络链接状况命令之-netstat
- 目标检测 | 盘点提升小目标检测的思路
- Qt5示例addressBook源码解析
- BZOJ 2429: [HAOI2006]聪明的猴子 MST