2016-02-26 94 views
0

编写一个程序,该程序确定玩家在篮球比赛中得分若干分数的所有不同方式 。三分球 分值3分(杜伊),投篮命中率2分,犯规 分别命中1分。请务必在最后打印总数为 的组合。篮球积分Java程序?

运行:

得分多少分? 8

2 3指针(多个),1场的目标(S),0罚球(S)

2 3指针(多个),0字段目标(S),2罚球(S)

1 3指针(多个),2场的目标(S),1个罚球(S)

1 3指针(多个),1场的目标(S),3罚球(S)

1个三分球,0个投篮命中,5个罚球(点球)

0 thre È指针(S),4场目标(一个或多个),0罚球(S)

0 3指针(S),3字段目标(S),2罚球(S)

0 3指针(S),2场的目标(S),4罚球(S)

0 3指针(多个),1场的目标(S),6罚球(S)

0 3指针(一个或多个),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分,但我不知道如何使它接受的任何点量,并获得正确输出或打印出可能解决方案的数量。我该怎么办?

+1

是这个家庭作业或类似的东西?如果是的话,请贴上标签。 – katzenhut

+0

您可以使用动态编程来解决此问题。看看[这篇文章](http://www.capacode.com/dynamic-programming/money-change/),它解决了类似的问题。也许你会得到一些想法。或者,[这个SO问题](http://stackoverflow.com/q/8031816/1828486)也询问动态编程。 –

+1

在我看来,不要直接从代码开始,你应该在笔和纸上解决问题。看看你是否可以弄清楚如何通过不同的组合来达到目标​​。如果你在此工作一段时间,你一定会看到一种模式。然后考虑如何提出一种算法,使其适用于所有可能的场景。然后才开始编写代码。 如果你直接潜入代码中,它只会让你更加困惑。上述方法将帮助您解决问题的能力。祝你好运! – akshayKhot

回答

2

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

只读了几行的时间,尽量看你怎么一点需要阅读之前你看着办吧YOURSELF


假设你有一个点的数量,作为一个例子,让我们做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");