请看我自己的答案,我想我做到了!
嗨,
编程竞赛的一个示例问题是编写一个程序,找出给定数量的宝石可能有多少多边形.
所以对于两块石头(n = 2),只有一个多面体:
XX
Run Code Online (Sandbox Code Playgroud)
您可能认为这是第二种解决方案:
X
X
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.如果您可以旋转它们,则polyominos不是唯一的.
因此,对于4个宝石(n = 4),有7个解决方案:
X
X XX X X X X
X X XX X XX XX XX
X X X XX X X XX
Run Code Online (Sandbox Code Playgroud)
应用程序必须能够找到解决方案 1 <= n <=10
PS:不允许在维基百科上使用polyominos列表 ;)
编辑:当然问题是:如何在Java,C/C++,C#中做到这一点
我用Java开始这个项目.但后来我不得不承认我不知道如何使用有效的算法构建多边形.
这是我到目前为止所做的:
import java.util.ArrayList;
import java.util.List;
public class Main
{
private int countPolyminos(int n)
{
hashes.clear();
count = 0;
boolean[][] matrix = new boolean[n][n];
createPolyominos(matrix, n);
return count;
}
private …Run Code Online (Sandbox Code Playgroud)