保龄球得分

2024-01-04 04:32
文章标签 得分 保龄球

本文主要是介绍保龄球得分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package com.lovo;

public class BowlingGame {
public static final int TOTAL_ROUND = 10; // 总局数

private int[] scores;      // 记录每局得分的数组
private int[][] numberOfHits;    // 记录每局两球击倒瓶子个数的数组
private int lastOneHit, lastTwoHit;   // 最后两次击球
private int totalScore;      // 总成绩

private int currentRound;     // 当前第几局
private boolean firstHit;     // 是否是每局的第一次击球

public BowlingGame() {
  scores = new int[TOTAL_ROUND];
  numberOfHits = new int[TOTAL_ROUND][2];
  firstHit = true;
}

/**
  * 扔出一颗球
  * @param num 打倒瓶子的数量
  */
public void throwTheBall(int num) {
  if(firstHit) { // 第一颗 球
   numberOfHits[currentRound][0] = num;
   if(num != 10) {
    firstHit = false; // 第一颗球没有全中则要打第二颗
   }
   else {
    currentRound += 1; // 第一颗球全中直接进入下一局
   }
  }
  else {
   numberOfHits[currentRound][1] = num;
   currentRound += 1;  // 打完第二颗球进入下一局
   firstHit = true;  // 准备投掷下一局的第一颗球
  }
}

public void calcScore() {
  // from round 1 to round 9
  for(int i = 0; i < numberOfHits.length - 1; i++) {
   if(numberOfHits[i][0] == 10) { // Strike(全中)
    scores[i] += 10;
    if(numberOfHits[i + 1][0] == 10) {
     scores[i] += 10;
     if(i < 8) {
      scores[i] += numberOfHits[i + 2][0];
     }
     else {
      scores[i] += lastOneHit;
     }
    }
    else {
     scores[i] += numberOfHits[i + 1][0] + numberOfHits[i + 1][1];
    }
   }
   else if(numberOfHits[i][0] + numberOfHits[i][1] == 10) { // Spare(补中)
    scores[i] += 10;
    scores[i] += numberOfHits[i + 1][0];
   }
   else {
    scores[i] += numberOfHits[i][0] + numberOfHits[i][1];
   }
  }
  // the last round
  if(numberOfHits[9][0] == 10) {
   scores[9] += 10;
   scores[9] += lastOneHit + lastTwoHit;
  }
  else if(numberOfHits[9][0] + numberOfHits[9][1] == 10) {
   scores[9] += 10;
   scores[9] += lastOneHit;
  }
  else {
   scores[9] += numberOfHits[9][0] + numberOfHits[9][1];
  }
}

/**
  * 设置最后第一球击倒瓶子数
  * @param num 击倒瓶子数
  */
public void setLastOneHit(int num) {
  this.lastOneHit = num;
}

/**
  * 设置最后第二球击倒瓶子数
  * @param num 瓶子数
  */
public void setLastTwoHit(int num) {
  this.lastTwoHit = num;
}

/**
  * 计算总分数
  * @return 总分数
  */
public int getTotalScore() {
  for(int i = 0; i < scores.length; i++) {
   totalScore += scores[i];
  }
  return totalScore;
}

/**
  * 获得指定局数的累积得分
  * @param round 局数
  * @return 从第一局到指定局数的累积得分
  */
public int getScoreByRound(int round) {
  int sum = 0;
  for(int i = 0; i <= round; i++) {
   sum += scores[i];
  }
  return sum;
}
}

package com.lovo;

import java.text.DecimalFormat;
import java.util.Scanner;

/**
* 保龄球计分程序
* @author 苏俊昊
*
*/
public class Test01 {

public static void main(String[] args) {
  DecimalFormat formatter = new DecimalFormat("00");
  Scanner sc = new Scanner(System.in);
 
  int firstHit = 0, secondHit = 0;
  BowlingGame game = new BowlingGame();
  for(int i = 0; i < BowlingGame.TOTAL_ROUND; i++) {
   System.out.println("=====第" + formatter.format(i + 1) + "回合=====");
   System.out.print("第一次击中: ");
   firstHit = sc.nextInt();
   game.throwTheBall(firstHit);
   if(firstHit < 10) { // 第一次没有全中就要打第二颗
    System.out.print("第二次击中: ");
    secondHit = sc.nextInt();
    game.throwTheBall(secondHit);
   }
   if(i == BowlingGame.TOTAL_ROUND - 1) {
    // 第十局如果全中或补中则要继续投掷球
    if(firstHit == 10 || firstHit + secondHit == 10) {
     System.out.print("加一球: ");
     int lastOne = sc.nextInt();
     game.setLastOneHit(lastOne);
     if(firstHit == 10) { // 第一颗球全中则还要再投掷一颗球
      System.out.print("加二球: ");
      int lastTow = sc.nextInt();
      game.setLastTwoHit(lastTow);
     }
    }
   }
  }
 
  game.calcScore(); // 计算成绩
 
  // 打印每一局的累积得分
  for(int i = 0; i < BowlingGame.TOTAL_ROUND; i++) {
   System.out.print(game.getScoreByRound(i) + "\t");
  }
 
  System.out.println("\n总分: " + game.getTotalScore()); // 打印总分数
 
  sc.close();
}
}

这篇关于保龄球得分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/568156

相关文章

P1166 打保龄球

共可以投 1 局 一局10轮     在一局中,一共有十个柱,会出现很多种情况。 第1次把10个    打倒全部   >>        分数=10+后2次得分 --若是第10轮则还需另加两次滚球;    没全部打倒 >>        第2次把剩下的            打倒   >>                分数=10+后1次得分        没全部打倒 >>

3276. 选择矩阵中单元格的最大得分

Powered by:NEFU AB-IN Link 文章目录 3276. 选择矩阵中单元格的最大得分题意思路代码 3276. 选择矩阵中单元格的最大得分 题意 给你一个由正整数构成的二维矩阵 grid。 你需要从矩阵中选择 一个或多个 单元格,选中的单元格应满足以下条件: 所选单元格中的任意两个单元格都不会处于矩阵的 同一行。 所选单元格的值 互不相同。 你的得分为

新SAT官方范文得分的分段分析

· 本次官方给出了两道写作新样题,样题的材料文章分别是节选自Paul Bogard于2012.12.21发表在《洛杉矶时报》的“Let There Be Dark.”及Dana Gioia于2005.04.10发表在《纽约时报》的“Why Literature Matters” 。   · 张卉老师结合之前的新SAT改革的说明,认为写作部分的基本出题思路没有大的调整,样题的材料文章都是节选自

【动态规划】【hard】力扣1301. 最大得分的路径数目

给你一个正方形字符数组 board ,你从数组最右下方的字符 ‘S’ 出发。 你的目标是到达数组最左上角的字符 ‘E’ ,数组剩余的部分为数字字符 1, 2, …, 9 或者障碍 ‘X’。在每一步移动中,你可以向上、向左或者左上方移动,可以移动的前提是到达的格子没有障碍。 一条路径的 「得分」 定义为:路径上所有数字的和。 请你返回一个列表,包含两个整数:第一个整数是 「得分」 的最大值,第

通过改变boost值来改变文档的得分源码

在进行相关度排序的时候,如果想加某个文档的相关度,使其在搜索解雇中排名更加靠前的位置上,则使用boost。 代码: package change; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.do

2010-2022年 上市公司彭博ESG披露评分、分项得分(披露评分、ESG披露评分、环境披露评分、社会信息披露评分、治理披露)

彭博ESG披露评分是彭博公司推出的评估工具,用于衡量全球上市公司在环境(E)、社会(S)和公司治理(G)方面的信息公开程度。评分依据公司年报和可持续发展报告等公开文件,满分为100分。原始数据涵盖2010至2022年间的披露评分及其分项得分。 数据指标  股票代码、年份、 ESG 、 E 、 S 、 G、代码、简称、ESG披露评分、环境披露评分、社会信息披露评分、治理披露评分。 https:

C语言编程:青年歌手参加歌曲大奖赛,有10个评委打分(满分10分),去掉最高最低分后,试编程求选手的平均得分

C语言编程:青年歌手参加歌曲大奖赛,有10个评委打分(满分10分),去掉最高最低分后,试编程求选手的平均得分: 代码如下: #include<stdio.h>void main(){int sum = 0,i;double avg,b;int a[10];int max,min;for(i=0;i<10;i++){scanf("%d",&a[i]);if(i==0)//只有第一次赋值m

Score Matching(得分匹配)

Score Matching(得分匹配)是一种统计学习方法,用于估计概率密度函数的梯度(即得分函数),而无需知道密度函数的归一化常数。这种方法由Hyvärinen在2005年提出,主要用于无监督学习,特别是在密度估计和生成模型中。 基本原理 在概率论中,得分函数(Score Function)是概率密度函数关于其参数的梯度。对于一个随机变量 x x x 的概率密度函数 p ( x ) p(

【因果推断python】24_倾向得分2

目录 倾向加权 倾向得分估计 倾向加权 好的,我们得到了倾向得分。怎么办?就像我说过的,我们需要做的就是以此为条件。例如,我们可以运行一个线性回归,它仅以倾向得分为条件,而不是所有的 X。现在,让我们看一下只使用倾向得分而不使用其他任何东西的技术。这个想法是用倾向得分写出均值的条件差 我们可以进一步简化这一点,但让我们这样看一下,因为它让我们对倾向得分的作用有了一些很

每日练习之字符串——得分

得分 题目描述   运行代码 #include <iostream>using namespace std;int main(){int n;cin>>n;while(n--){string s;cin>>s;int l=s.length();int a=0;int t=1;for(int i=0;i<l;++i){if(s[i]=='O'){a+=t;t++;}else if(s[i