代码:
package program3/**
* 纸牌
* @author lina
*/
public class Card {
/**
*/
private final boolean type
/**
* int型,牌值
*/
private final int number
/**
* 构造函数
* @param type boolean型,false为梅花,true为红桃
* @param number int型,牌值
*/
public Card(boolean type, int number) {
this.type = type
this.number = number
}
public String toString() {
String t = ""
String v = ""
if(!this.type) {
t = "梅花"
} else {
t = "红桃"
}
if(this.number == 1) {
v = "A"
} else if(this.number == 11) {
v = "J"
} else if(this.number == 12) {
v = "Q"
} else if(this.number == 13) {
v = "K"
} else {
v = this.number + ""
}
String back = t + v
return back
}
public boolean isType() {
return type
}
public int getNumber() {
return number
}
} package program3
/**
* 主程序
* @author lina
*/
public class Main {
/**
* 构造初始卡组:
* 0~12为左手的梅花2~A
* 13~25为右手的红桃2~A
*/
private static Card[] create_cards() {
Card[] back = new Card[26]
for(int i = 0 i < back.length i++) {
// 为梅花
if(i / 13 == 0) {
if (i == 12) {
back[i] = new Card(false, 1)
} else {
back[i] = new Card(false, i + 2)
}
}
// 为红桃
if(i / 13 == 1) {
if(i == 25) {
back[i] = new Card(true, 1)
} else {
back[i] = new Card(true, i % 13 + 2)
}
}
}
return back
}
/**
* 分作输出卡组
* @param cards
*/
private static void show(Card[] cards) {
System.out.print("左手牌组:")
for(int i = 0 i <= 11 i++) {
System.out.print(cards[i] + ",")
}
System.out.print(cards[12])
System.out.println()
System.out.print("右手牌组:")
for(int i = 13 i <= 24 i++) {
System.out.print(cards[i] + ",")
}
System.out.print(cards[25])
System.out.println()
}
/**
* 进行一次洗牌
* @param cards Card[]型,待洗牌组
* @return Card[]型,洗牌后的牌组
*/
private static Card[] shuffle(Card[] cards) {
Card[] back = new Card[cards.length]
for(int i = 0 i < cards.length / 2 i++) {
back[2 * i] = cards[i + 13]
back[2 * i + 1] = cards[i]
}
return back
}
public static void main(String[] args) {
Card[] cards = create_cards()
System.out.println("初始时:")
show(cards)
// int count = 0 // 洗牌次数
// do {
// count++
// cards = shuffle(cards)
// } while(cards[0].isType() || (!cards[0].isType() && cards[0].getNumber() != 2))
// System.out.println("第" + count + "次洗牌后:")
// show(cards)
int count = 1 // 循环洗牌次数
int realCount = count % 18 // 每洗18次牌牌组将恢复初始
for(int i = 0 i < realCount i++) {
cards = shuffle(cards)
}
System.out.println("第" + count + "轮洗牌后:")
show(cards)
}
}
注意:每洗18次牌牌组是会复原的,因此无论洗多少次牌,我们在计算时总可以控制在洗18次之内!!!又因为牌组的大小固定为26张,则本算法的时间复杂度将为常数阶O(1),否则时间复杂度将与洗牌次数有关变为恐怖的O(n)。
我使用了一个辅助数组,因为牌组长度固定为26,因此也无所谓了,空间复杂度也是O(1)
以下是洗7次牌时的测试数据:
初始时:
左手牌组:梅花2,梅花3,梅花4,梅花5,梅花6,梅花7,梅花8,梅花9,梅花10,梅花J,梅花Q,梅花K,梅花A
右手牌组:红桃2,红桃3,红桃4,红桃5,红桃6,红桃7,红桃8,红桃9,红桃10,红桃J,红桃Q,红桃K,红桃A
第7轮洗牌后:
左手牌组:红桃J,红桃7,红桃3,梅花Q,梅花8,梅花4,红桃A,红桃10,红桃6,红桃2,梅花J,梅花7,梅花3
右手牌组:红桃K,红桃9,红桃5,梅花A,梅花10,梅花6,梅花2,红桃Q,红桃8,红桃4,梅花K,梅花9,梅花5
然后是洗18次牌时(变回初始了):
初始时:
左手牌组:梅花2,梅花3,梅花4,梅花5,梅花6,梅花7,梅花8,梅花9,梅花10,梅花J,梅花Q,梅花K,梅花A
右手牌组:红桃2,红桃3,红桃4,红桃5,红桃6,红桃7,红桃8,红桃9,红桃10,红桃J,红桃Q,红桃K,红桃A
第18轮洗牌后:
左手牌组:梅花2,梅花3,梅花4,梅花5,梅花6,梅花7,梅花8,梅花9,梅花10,梅花J,梅花Q,梅花K,梅花A
右手牌组:红桃2,红桃3,红桃4,红桃5,红桃6,红桃7,红桃8,红桃9,红桃10,红桃J,红桃Q,红桃K,红桃A
基本上我觉得你服务器要买贵点的,尤其要多核CPU ,越多越好,因为服务器占的资源多。当初我们服务器最少四核(测试用),多的到16核。所以服务器可以贵点。然后台式机的开发的,我觉得3000多就好,集成显卡就好。配置2G内存,160G硬盘,相当好买,想买哪台就买哪台。当然挑好的一些显示器最好。因为开发一天到晚对着显示器。我就是深受其害~
OPPO 全触屏的应该是T9吧!我用的就是T9行货,你是用的JAVA运行的吗?如果不是JAVA,就直接按下关机键试试,如果QQ没退,在屏幕左上角有QQ的显示就是后台了。因为你说是高仿的,所以我也不太肯定。