本文共 2888 字,大约阅读时间需要 9 分钟。
有个游戏叫卡片邻居游戏,它使用多张正方形的卡片,每张卡片在上下左右四边上有数字,可以顺时针旋转,如下图所示。
卡片在游戏板上被放成一排,相邻两张卡片的邻边应当具有相同的数字,不断有新的卡片需要放置到游戏板上,放置的位置应当满足相临边数字相同的要求(亦可放在头部和尾部)。下图展示了游戏板上的一组卡片排列和新增一张卡片后的游戏板
完成类NumberCard,包含构造函数和方法 rotate 和 getLeft,getRight,分别表示顺时针旋转卡片,返回左侧数字,返回右侧数字
完成类CardGame表示游戏版,包含方法int getIndexForFit(NameCard),boolean insertCard(NameCard),print() 其中getIndexForFit返回用最少的旋转数能将卡片插入到游戏板中的最靠前的位置,头部位置为0. insertCard将卡片通过最少的旋转插入到游戏板,按旋转完成的方向插入getIndexForFit返回的位置,返回插入成功与否。print函数按顺序输出每个卡片,每个卡片按照上右下左的顺序输出各个边上的数字。(注:应当选择适当的结构存储游戏板中的卡片)
输入格式:
插入新的卡片的个数 每个新插入的新卡片,按上右下左顺序输出格式:
依次输出游戏板上各个卡片,按上右下左的顺序输入样例:
在这里给出一组输入。例如:31 2 3 46 4 3 34 3 7 4
输出样例:
在这里给出相应的输出。例如:4 3 7 4 6 4 3 3 1 2 3 4
这个题其实没有这么简单,应该还需要考虑改变之前放的,但这个题的数据没有,我也不想写了,直接粘出来了,随便拿。
.
. . . . . .防查重,要复制的话最好改一改。
关于最后一个测试点,我也很懵逼,别人和我的答案一样,但就只有这个代码能过,实在不清楚怎么回事。
知道了,是我的旋转函数写错了,但是改正之后又过不了了,就不改了,先这样吧。
最后一个测试点有问题,最后一个数据没插入,应该是可以的,而且这个测试点的数据还不能旋转(我的函数都写错了,这么看好像所有的测试点都不用旋转/捂脸),然后就卡bug过了…
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n=input.nextInt(); int[] a=new int[4]; CardGame cardgame=new CardGame(); cardgame.card[0].nextmark=1; for(int i=0;i0; i--){ // number[i] = number[(i - 1 + 4) % 4]; //} //number[0]=cnt; }}class CardGame { public NumberCard[] card; public CardGame() { card=new NumberCard[100]; for(int i=0;i<100;i++){ card[i]=new NumberCard(); } card[0].nextmark = 1; card[1].mark=1; } public int getIndexForFit(NumberCard c) { for (int i = 0; i < 4; i++)// 旋转次数 { for (int j = 0; j != 1;) { boolean left = false, right = false; NumberCard a = card[j], b = card[card[j].nextmark]; if (a.mark == 0 || a.number[1] == c.number[3]) left = true; if (b.mark == 1 || b.number[3] == c.number[1]) right = true; if (left==true && right==true) { return j; } j = card[j].nextmark; } c.rotate(); } return -1; } public boolean insertCard(NumberCard c) { int x = getIndexForFit(c); if (x == -1) return false; c.nextmark = card[x].nextmark; card[x].nextmark = c.mark; card[c.mark]=c; return true; } public void print() { int x = card[0].nextmark; boolean flag=false; while (x != 1) { for (int i = 0; i < 4; i++) { if(flag==true) System.out.print(" "+card[x].number[i]); else System.out.print(card[x].number[i]); flag=true; } x=card[x].nextmark; } }}
转载地址:http://lmqbi.baihongyu.com/