博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PTA卡片邻居游戏JAVA版——山东科技大学
阅读量:4030 次
发布时间:2019-05-24

本文共 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;i
0; 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/

你可能感兴趣的文章
自然计算
查看>>
自然计算时间复杂度杂谈
查看>>
当前主要目标和工作
查看>>
系统菜单
查看>>
路漫漫其修远兮,吾将上下而求索(2)
查看>>
versions mac yosemite 下崩溃的修复
查看>>
github push 出现connection refused 的处理办法
查看>>
Linux配置sendmail实现PHP发送邮件
查看>>
c++ 特性回顾
查看>>
网站注册的时候,烦人的生日年份选择的改进想法
查看>>
游戏开发两年记 之 工程和理论需双剑合璧
查看>>
Nachos中switch汇编源码分析
查看>>
游戏开发两年之产品逻辑鸡肋么?
查看>>
secureCRT和Xshell登录Ubuntu
查看>>
secureCRT和Xshell登录ubuntu
查看>>
Apache下c语言的cgi如何获得Get,Post参数
查看>>
protobuf的使用初探
查看>>
ngx_http分析
查看>>
搭建一个php学习框架mycake
查看>>
MVC模式概念
查看>>