2016-02-26 116 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");