国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Java實現24點小游戲

Java實現24點小游戲

2021-07-12 15:09WendyRay Java教程

這篇文章主要為大家詳細介紹了Java實現24點小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現24點小游戲的具體代碼,供大家參考,具體內容如下

程序設計要求:

24點游戲是經典的紙牌益智游戲。

常見游戲規則:

從撲克中每次取出4張牌。使用加減乘除,第一個能得出24者為贏。(其中,j代表11,q代表12,k代表13,a代表1),按照要求編程解決24點游戲。

基本要求: 隨機生成4個代表撲克牌牌面的數字字母,程序自動列出所有可能算出24的表達式,用擅長的語言(c/c++/java或其他均可)實現程序解決問題。

1.程序風格良好(使用自定義注釋模板)
2.列出表達式無重復。

算法設計思路:

算法采用了窮舉的方法,對所有數字和操作符進行組合,從而找到所有的情況。
剛開始將四個數進行分組排序。
算法中我采用了將四個數分為1種的,兩種的(在兩種中又分為兩種數的個數分別為1和3的,個數分別為2和2的),三種的和四種的,將所有情況排序排了出來。
每次只運算2個數,然后將結果拿去進行下一次運算。剛開始有4個數,拿出兩個數進行第一次運算,運算后得出三個數,然后在這三個數中再拿出兩個進行第二次運算,運算后就有兩個數了,第三次運算就是將這兩個數進行計算,得出最后值,判斷最后這個值是否為24,若為24,則輸出表達式,若不是,則輸出提示消息。
現在在這4個數確定位置的情況下,再來改變操作符,即每次2個數進行運算的時候,有4種情況。在下一次計算的時候同樣有4種情況,最后一次計算(第3次)同理。這樣就找到了所有解的情況。

算法流程圖為:

Java實現24點小游戲

下面是代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
package game;
 
import java.util.arraylist;
import java.util.hashmap;
import java.util.map;
import java.util.random;
 
public class compute {
 //定義隨機產生的四個數
 static int number[] = new int[4];
 //轉換后的num1,num2,num3,num4
 static int m[]=new int [4];
 static string n[] = new string[4];
 //用來判斷是否有解
 static boolean flag = false;
 //存放操作符
 static char[] operator = { '+', '-', '*', '/' };
 private static object key;
 
 public static void main(string[] args){
 random rand = new random();
 system.out.println("下列給出四個數字,使用+,-,*,/進行計算使最后計算結果為24");
 for(int i=0;i<4;i++){
 number[i]=rand.nextint(13)+1;//隨機生成四個int型數
 
 if(number[i]==1){
 system.out.println("a");//如果隨機生成的數為1,則顯示為撲克牌牌面中的a
 }
 else if(number[i]==11){
 system.out.println("j");//如果隨機生成的數為11,則顯示為撲克牌牌面中的j
 }
 else if(number[i]==12){
 system.out.println("q");//如果隨機生成的數為12,則顯示為撲克牌牌面中的q
 }
 else if(number[i]==13){
 system.out.println("k");//如果隨機生成的數為13,則顯示為撲克牌牌面中的k
 }
 else
 system.out.println(number[i]);
 }
 system.out.println("可能的結果有:");
 calculate();
 
 }
 
 
 //給定2個數和指定操作符的計算
 public static int calcute(int count1, int count2, char operator) {
 if (operator == '+') {
  return count1 + count2;
  }
  else if (operator == '-') {
  return count1 - count2;
  }
  else if (operator == '*') {
  return count1 * count2;
  }
  else if ((operator == '/' )&& (count2 != 0) && (count1%count2==0)) {
  return count1 / count2;
  }
  else {
  return -1;  
  }
 }
 
 
 //計算生成24的函數
 public static void calculate(){
 
 map<integer, integer> map = new hashmap<integer, integer>();
 //存放數字,用來判斷輸入的4個數字中有幾個重復的,和重復的情況
 for (int i = 0; i < number.length; i++) {
 if(map.get(number[i]) == null){
 map.put(number[i], 1);
 }
 else {
 map.put(number[i], map.get(number[i]) + 1);
 }
 }
 if(map.size() == 1){
 //如果只有一種數字,此時只有一種排列組合,如5,5,5,5
 calculation(number[0], number[1],number[2],number[3]);
 }
 else if(map.size()==2){
 //如果只有2種數字,有2種情況,如1,1,2,2和1,1,1,2
 int index = 0;//用于數據處理
 int state = 0;//判斷是哪種情況
 for (integer key : map.keyset()) {
 if(map.get(key) == 1){
  //如果是有1個數字和其他3個都不同,將number變為 number[0]=number[1]=number[2],
  //將不同的那個放到number[3],方便計算
  number[3] = key;
  state = 1;
 }
 else if(map.get(key)==2){
  //如果是兩兩相同的情況,將number變為number[0]=number[1],number[2]=number[3]的情況
  number[index++]=key;
  number[index++]=key;
 }
 else{
  number[index++]=key;
 }
 }
 //列出2種情況的所有排列組合,并分別計算
 if(state == 1){
 calculation(number[3],number[1],number[1],number[1]);
 calculation(number[1],number[3],number[1],number[1]);
 calculation(number[1],number[1],number[3],number[1]);
 calculation(number[1],number[1],number[1],number[3]);
 }
 if(state==0){
 calculation(number[1],number[1],number[3],number[3]);
 calculation(number[1],number[3],number[1],number[3]);
 calculation(number[1],number[3],number[3],number[1]);
 calculation(number[3],number[3],number[1],number[1]);
 calculation(number[3],number[1],number[3],number[1]);
 calculation(number[3],number[1],number[1],number[3]);
 }
 }
 else if(map.size()==3){
 //有3種數字的情況
 int index = 0;
 for (integer key : map.keyset()) {
 if(map.get(key) == 2){ 
  //將相同的2個數字放到number[2]=number[3]
  number[2] = key; 
  number[3] = key;
 }
 else
  number[index++] = key;
 }
 }
 //排列組合,所有情況
 calculation(number[0],number[1],number[3],number[3]);
 calculation(number[0],number[3],number[1],number[3]);
 calculation(number[0],number[3],number[3],number[1]);
 calculation(number[1],number[0],number[3],number[3]);
 calculation(number[1],number[3],number[0],number[3]);
 calculation(number[1],number[3],number[3],number[0]);
 calculation(number[3],number[3],number[0],number[1]);
 calculation(number[3],number[3],number[1],number[0]);
 calculation(number[3],number[1],number[3],number[0]);
 calculation(number[3],number[0],number[3],number[1]);
 calculation(number[3],number[0],number[1],number[3]);
 calculation(number[3],number[1],number[0],number[3]);
 }
 else if(map.size() == 4){
 //4個數都不同的情況
 calculation(number[0],number[1],number[2],number[3]);
 calculation(number[0],number[1],number[3],number[2]);
 calculation(number[0],number[2],number[1],number[3]);
 calculation(number[0],number[2],number[3],number[1]);
 calculation(number[0],number[3],number[1],number[2]);
 calculation(number[0],number[3],number[2],number[1]);
 calculation(number[1],number[0],number[2],number[3]);
 calculation(number[1],number[0],number[3],number[2]);
 calculation(number[1],number[2],number[3],number[0]);
 calculation(number[1],number[2],number[0],number[3]);
 calculation(number[1],number[3],number[0],number[2]);
 calculation(number[1],number[3],number[2],number[0]);
 calculation(number[2],number[0],number[1],number[3]);
 calculation(number[2],number[0],number[3],number[1]);
 calculation(number[2],number[1],number[0],number[3]);
 calculation(number[2],number[1],number[3],number[0]);
 calculation(number[2],number[3],number[0],number[1]);
 calculation(number[2],number[3],number[1],number[0]);
 calculation(number[3],number[0],number[1],number[2]);
 calculation(number[3],number[0],number[2],number[1]);
 calculation(number[3],number[1],number[0],number[2]);
 calculation(number[3],number[1],number[2],number[0]);
 calculation(number[3],number[2],number[0],number[1]);
 calculation(number[3],number[2],number[1],number[0]);
 }
 if(flag==false)
 system.out.println("這四張牌面數字無法經過運算得到24!");
 }
 
 
 public static void calculation(int num1, int num2, int num3, int num4){
 
 for (int i = 0; i < 4; i++){
 //第1次計算,先從四個數中任意選擇兩個進行計算
 char operator1 = operator[i];
 int firstresult = calcute(num1, num2, operator1);//先選第一,和第二個數進行計算
 int midresult = calcute(num2, num3, operator1);//先選第二和第三兩個數進行計算
 int tailresult = calcute(num3,num4, operator1);//先選第三和第四倆個數進行計算
 for (int j = 0; j < 4; j++){
 //第2次計算,從上次計算的結果繼續執行,這次從三個數中選擇兩個進行計算
 char operator2 = operator[j];
 int firstmidresult = calcute(firstresult, num3, operator2);
 int firsttailresult = calcute(num3,num4,operator2);
 int midfirstresult = calcute(num1, midresult, operator2);
 int midtailresult= calcute(midresult,num4,operator2);
 int tailmidresult = calcute(num2, tailresult, operator2);
 for (int k = 0; k < 4; k++){
  //第3次計算,也是最后1次計算,計算兩個數的結果,如果是24則輸出表達式
  char operator3 = operator[k];
  //在以上的計算中num1,num2,num3,num4都是整型數值,但若要輸出為帶有a,j,q,k的表達式,則要將這四個數都變為string類型,下同
  if(calcute(firstmidresult, num4, operator3) == 24){
  m[0]=num1;
  m[1]=num2;
  m[2]=num3;
  m[3]=num4;
  for(int p=0;p<4;p++){
  if(m[p]==1){
  n[p]="a";}
  if(m[p]==2){
  n[p]="2";}
  if(m[p]==3){
  n[p]="3";}
  if(m[p]==4){
  n[p]="4";}
  if(m[p]==5){
  n[p]="5";}
  if(m[p]==6){
  n[p]="6";}
  if(m[p]==7){
  n[p]="7";}
  if(m[p]==8){
  n[p]="8";}
  if(m[p]==9){
  n[p]="9";}
  if(m[p]==10){
  n[p]="10";}
  if(m[p]==11){
  n[p]="j";}
  if(m[p]==12){
  n[p]="q";}
  if(m[p]==13){
  n[p]="k";}
  }
  system.out.println("((" + n[0] + operator1 + n[1] + ")" + operator2 + n[2] + ")" + operator3 + n[3]);
  flag = true;//若有表達式輸出,則將說明有解,下同
  }
  if(calcute(firstresult, firsttailresult, operator3) == 24){
  system.out.println("(" + n[0] + operator1 + n[1] + ")" + operator3 + "(" + n[2] + operator2 + n[3] + ")"); 
  flag = true;
  }
  if(calcute(midfirstresult, num4, operator3) == 24){
  m[0]=num1;
  m[1]=num2;
  m[2]=num3;
  m[3]=num4; 
  for(int p=0;p<4;p++){
  if(m[p]==1){
  n[p]="a";}
  if(m[p]==2){
  n[p]="2";}
  if(m[p]==3){
  n[p]="3";}
  if(m[p]==4){
  n[p]="4";}
  if(m[p]==5){
  n[p]="5";}
  if(m[p]==6){
  n[p]="6";}
  if(m[p]==7){
  n[p]="7";}
  if(m[p]==8){
  n[p]="8";}
  if(m[p]==9){
  n[p]="9";}
  if(m[p]==10){
  n[p]="10";}
  if(m[p]==11){
  n[p]="j";}
  if(m[p]==12){
  n[p]="q";}
  if(m[p]==13){
  n[p]="k";}
  }
  system.out.println("(" + n[0] + operator2 + "(" + n[1] + operator1 + n[2] + "))" + operator3 + n[3]);
  flag = true;
  }
  if(calcute(num1,midtailresult, operator3) == 24){
  m[0]=num1;
  m[1]=num2;
  m[2]=num3;
  m[3]=num4;
  for(int p=0;p<4;p++){
  if(m[p]==1){
  n[p]="a";}
  if(m[p]==2){
  n[p]="2";}
  if(m[p]==3){
  n[p]="3";}
  if(m[p]==4){
  n[p]="4";}
  if(m[p]==5){
  n[p]="5";}
  if(m[p]==6){
  n[p]="6";}
  if(m[p]==7){
  n[p]="7";}
  if(m[p]==8){
  n[p]="8";}
  if(m[p]==9){
  n[p]="9";}
  if(m[p]==10){
  n[p]="10";}
  if(m[p]==11){
  n[p]="j";}
  if(m[p]==12){
  n[p]="q";}
  if(m[p]==13){
  n[p]="k";}
  }
  system.out.println(" " + n[0] + operator3 + "((" + n[1] + operator1 + n[2] + ")" + operator2 + n[3] + ")"); 
  flag = true;
  }
  if(calcute(num1,tailmidresult,operator3) == 24){
  m[0]=num1;
  m[1]=num2;
  m[2]=num3;
  m[3]=num4;
  for(int p=0;p<4;p++){
  if(m[p]==1){
  n[p]="a";}
  if(m[p]==2){
  n[p]="2";}
  if(m[p]==3){
  n[p]="3";}
  if(m[p]==4){
  n[p]="4";}
  if(m[p]==5){
  n[p]="5";}
  if(m[p]==6){
  n[p]="6";}
  if(m[p]==7){
  n[p]="7";}
  if(m[p]==8){
  n[p]="8";}
  if(m[p]==9){
  n[p]="9";}
  if(m[p]==10){
  n[p]="10";}
  if(m[p]==11){
  n[p]="j";}
  if(m[p]==12){
  n[p]="q";}
  if(m[p]==13){
  n[p]="k";}
  }
  system.out.println(" " + n[0] + operator3 + "(" + n[1] + operator2 + "(" + n[2] + operator1 + n[3] + "))"); 
  flag = true;
  }
 }
 }
 }
 }
}

運行及測試截圖:

Java實現24點小游戲

Java實現24點小游戲

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/WendyRay/article/details/82891624

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91久久国产综合久久91精品网站 | 久久大 | 羞羞视频在线播放 | 国产精品 日韩 | 日本不卡视频 | 青青草国产精品 | 天堂资源在线 | 日韩综合一区 | а天堂中文最新一区二区三区 | 久久99精品久久久久久琪琪 | 黄色成人在线 | 最新日韩av | 欧美中文在线 | 亚洲在线电影 | 中文字幕一级 | 国产亚洲成av人片在线观看桃 | 夜夜骑日日操 | 日本久久久久久 | 激情欧美日韩一区二区 | 一级毛片免费视频 | 精品久久一二三区 | 亚洲一区二区在线视频 | 日韩一区二区三区在线观看 | 亚洲美女精品视频 | 欧美在线视频网站 | 国产免费久久精品 | 精品视频久久 | 精品一区二区免费视频 | 午夜午夜精品一区二区三区文 | 国产精品国产精品国产专区不片 | 欧美国产综合一区 | 精品一区二区视频 | av一区二区三区 | h漫在线观看 | 日韩一区二区三区视频 | 亚洲一区二区三区在线 | 91久久国产精品 | 欧美成人激情视频 | 国产在线精品一区 | 一级片黄色免费 | 免费高清黄色 |