编写一个程序,确定玩家的所有不同方式 在篮球比赛中得分一定数量。三个指针 值得3分(duh),投篮命中率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种不同的得分方式
到目前为止我所拥有的:
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点,但我不知道如何让它接受任何数量的点并获得正确的输出或打印出可能的解决方案的数量。我该怎么办?
答案 0 :(得分:2)
因为这是作业,答案就在最后,我希望你不需要它。
一次只阅读少数几条线,试着看看你自己想要什么之前需要阅读
假设您有许多要点,例如我们要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" );