进行了一下修改,比原来更整洁了
有个游戏叫卡片邻居游戏,它使用多张正方形的卡片,每张卡片在上下左右四边上有数字,可以顺时针旋转,如下图所示。
卡片在游戏板上被放成一排,相邻两张卡片的邻边应当具有相同的数字,不断有新的卡片需要放置到游戏板上,放置的位置应当满足相临边数字相同的要求(亦可放在头部和尾部)。下图展示了游戏板上的一组卡片排列和新增一张卡片后的游戏板
完成类NumberCard,包含构造函数和方法 rotate 和 getLeft,getRight,分别表示顺时针旋转卡片,返回左侧数字,返回右侧数字
完成类CardGame表示游戏版,包含方法int getIndexForFit(NameCard),boolean insertCard(NameCard),print() 其中getIndexForFit返回用最少的旋转数能将卡片插入到游戏板中的最靠前的位置,头部位置为0. insertCard将卡片通过最少的旋转插入到游戏板,按旋转完成的方向插入getIndexForFit返回的位置,返回插入成功与否。print函数按顺序输出每个卡片,每个卡片按照上右下左的顺序输出各个边上的数字。(注:应当选择适当的结构存储游戏板中的卡片)
输入格式:
插入新的卡片的个数 每个新插入的新卡片,按上右下左顺序
输出格式:
依次输出游戏板上各个卡片,按上右下左的顺序
输入样例:
在这里给出一组输入。例如:
3
1 2 3 4
6 4 3 3
4 3 7 4
输出样例:
在这里给出相应的输出。例如:
4 3 7 4 6 4 3 3 1 2 3 4
package zuoye;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n,k,p;
boolean flag = false;
CardGame c = new CardGame();
n = sc.nextInt();
NumberCard num = new NumberCard(sc.nextInt(), sc.nextInt(), sc.nextInt(), sc.nextInt());
c.add(num,0);
for(int i=1;i<n;i++) {
num = new NumberCard(sc.nextInt(),sc.nextInt(),sc.nextInt(),sc.nextInt());
flag = c.insertCard(num);
k = 0;
while(!flag&&k<4) {
num.rotate();
flag = c.insertCard(num);
k++;
}
if(flag) {
p = c.getIndexForFit(num);
c.add(num, p);
}
flag = false;
}
c.print();
sc.close();
}
}
class NumberCard{
int up,down,left,right;
public NumberCard(int u,int r,int d,int l) {
left = l;
right = r;
up = u;
down = d;
}
public void rotate() {
int temp;
temp = up;
up = left;
left = down;
down = right;
right = temp;
}
public int getLeft() {
return left;
}
public int getRight() {
return right;
}
public int getUp() {
return up;
}
public int getDown() {
return down;
}
}
class CardGame {
NumberCard num[] = new NumberCard[100];
int m=0;
public CardGame() {
}
public void add(NumberCard n,int p) {
for(int i=m;i>p;i--)
num[i] = num[i-1];
num[p] = n;
m++;
}
public int getIndexForFit(NumberCard n) {
if(n.right == num[0].left)
return 0;
else if(n.left == num[m-1].right)
return m;
for(int i=1;i<m;i++) {
if(n.left == num[i-1].right && n.right == num[i].left)
return i;
}
return -1;
}
public boolean insertCard(NumberCard n) {
if(n.right == num[0].left)
return true;
else if(n.left == num[m-1].right)
return true;
for(int i=1;i<m;i++) {
if(n.left == num[i-1].right && n.right == num[i].left)
return true;
}
return false;
}
public void print() {
System.out.print(num[0].up+" "+num[0].right+" "+num[0].down+" "+num[0].left);
for(int i=1;i<m;i++) {
System.out.print(" "+num[i].getUp()+" "+num[i].getRight()+" "+num[i].getDown()+" "+num[i].getLeft());
}
}
}