【问题标题】:Basketball Points Java Program?篮球积分Java程序?
【发布时间】:2016-02-26 18:57:02
【问题描述】:

编写一个程序,确定玩家的所有不同方式 在篮球比赛中获得一定数量的分数。三个指针 得 3 分(废话),投篮得 2 分,犯规 每个镜头都值 1 分。一定要打印总数 最后的组合。

运行:

得了多少分? 8

2个三分球,1个投篮命中,0个犯规

2个三分球,0个射门得分,2个犯规

1个三分球,2个投篮命中,1个犯规

1 次三分球,1 次投篮,3 次罚球

1 次三分球,0 次投篮,5 次罚球

0 次三分球,4 次射门,0 次罚球

0 次三分球,3 次投篮命中,2 次罚球

0 次三分球,2 次投篮,4 次罚球

0 次三分球,1 次投篮,6 次罚球

0个三分球,0个射门得分,8个犯规

有 10 种不同的方式来获得 8 分

到目前为止我所拥有的:

import java.util.Scanner;
    public class MarchMadness 
    {
        public static void main(String[] args)
        {
            Scanner kbReader = new Scanner(System.in);
            System.out.println("How many points were scored?");
            int points = kbReader.nextInt();
            int ft = 1;
            int fg = 2;
            int tp = 3;

            if (points % tp == 0)
            {   
               System.out.println((points/tp) + " three pointers.");
            }


        }
}

我知道如何使程序适用于特定情况,例如 8 分,但我不知道如何使其接受任何数量的点并获得正确的输出或打印出可能的解决方案的数量。我该怎么办?

【问题讨论】:

  • 这是作业还是类似的东西?如果是,请适当标记。
  • 你可以使用动态规划来解决这个问题。看看this article,它解决了类似的问题。也许你会得到一些想法。或者,this SO question 也会询问动态编程。
  • 在我看来,与其直接从代码开始,不如用纸笔解决问题。看看你是否能弄清楚如何做出不同的组合来达到目标​​。如果你在它上面工作一段时间,你肯定会看到一个模式。然后想想如何想出一个算法,让它适用于所有可能的场景。然后只从编写代码开始。如果你直接深入代码,只会让你更加困惑。上述方法总体上将帮助您提高解决问题的能力。祝你好运!
  • @katzenhut 没有作业标签。见meta.stackexchange.com/questions/147100/…
  • @jpsizzls 请将答案标记为正确

标签: java


【解决方案1】:

因为这是作业,所以答案在最后,我希望你不需要它。

一次只读几行,在你自己弄清楚之前,试着看看你需要读多少行


假设您有很多点,例如让我们设为points=16

1.有多少个三指针?

你能从points 得到多少个三指针?好吧,最多points/3.0=5.333。让我们将其四舍五入为5。一般情况下:

int maxThreePointers=points/3;

Java 中的整数运算会自动向下舍入。现在我们知道三个指针的数量必须在0 .. maxThreePointers 范围内。现在我们知道了很多!

2。多少个射门得分?

从上面的范围中选择任意个三个指针,作为例子,让我们做threePointers = 2的例子。想想剩下要分配的点数。 int pointsMissing = points - threePointers*3; 在我们的例子中是 pointsMissing = 16 - 2*3 = 10

冲洗并重复第一个想法:我们现在有 10 分,我们最多可以有多少个射门得分? int maxFieldGoals = pointsMissing/2;,在示例中介于 0 和 5 之间。

3.犯规次数是多少?

从上述范围中选择任意个三分球和射门得分。剩下的分数必须是犯规目标。完成!

这可以用一组嵌套循环编码:


剧透墙


剧透墙


剧透墙


剧透墙


剧透墙


剧透墙


剧透墙


剧透墙


int points = 16; // read this from stdin. 
int maxThreePointers = points/3; 
int count = 0; 

for( int threePointers = 0; threePointers <= maxThreePointers; threePointers++ ){
  int remainingPoints = points - threePointers*3; 
  int maxFieldGoals = remainingPoints/2; 
  for( int fieldGoals = 0; fieldGoals <= maxFieldGoals; fieldGoals ++ ){
    // last one is easy! 
    int foulShots = remainingPoints - fieldGoals*2; 
    count++; 
    System.out.println(threePointers + " three pointers, " + fieldGoals + " field goals and " + foulShots + " foul shots" ); 
  }
}

System.out.println( "There are " + count + " ways to score " + points + " points" );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多