設(shè)計要求:
設(shè)計要求實現(xiàn)如下功能:
(1)設(shè)計實現(xiàn)一個連連看游戲;
(2)玩家選擇兩個相同的棋子則兩棋子同時消去,可消去的棋子之間應(yīng)該能連通,且連接時拐角不能超過兩個;
(3)當(dāng)玩家找不到相應(yīng)棋子時,玩家輸入“?? ??”,系統(tǒng)應(yīng)該提示可消去的棋子位置;
(4)棋盤面積至少為20x20,中間應(yīng)該空出大約10%~20%的空間用‘-’表示。棋子用大寫字母ABCD表示。(提示:棋子種類不宜太多,且每種為偶數(shù));
這是一個比較簡單的搜索問題。
比如說:game[i][j];按其四個方向進行搜索,在i和j上的標號為1,表示沒有拐角,在對1周圍四個方向進行展開并標為2,表示有一個拐點;再對為2的拐點展開,同樣的標為3,表示經(jīng)過兩次拐角能夠到達!其他的點為0;
if(game[i][j]==0)return false;//表示不能找到這樣的點
if(game[i][j]>0&&game[i][j]<4)return true;//表示可以找到這樣的點
下面是關(guān)鍵部分的代碼,如有錯誤,請高手指點
bool search(int x1,int y1,int x2,int y2)
2 {
3 memset(gk,0,sizeof(gk));
4 char t=game[x2][y2];
5 game[x2][y2]=' ';
6 gk[x1][y1]=1;
7 //對game[x1][y1]四個方向是空格的標為1
8 for (int i=x1-1;i>=0;i--){
9 if(game[i][y1]==' ')gk[i][y1]=1;
10 else break;
11 }
12 for (int j=x1+1;j<26;j++){
13 if(game[j][y1]==' ')gk[j][y1]=1;
14 else break;
15 }
16
17 for (int i=y1-1;i>=0;i--){
18 if(game[x1][i]==' ')gk[x1][i]=1;
19 else break;
20 }
21 for (int i=y1+1;i<26;i++){
22 if(game[x1][i]==' ')gk[x1][i]=1;
23 else break;
24 }
25
26 //對gk[i][j]為1的四個方向是空格的標為2
27 for (int i=1;i<26;i++)
28 for (int j=1;j<26;j++)
29 if (gk[i][j]==1){
30 for (int k=i-1;k>=0;k--){
31 if (game[k][j]==' '){
32 if(gk[k][j]==0)gk[k][j]=2;
33 }
34 else break;
35 }
36 for (int k=i+1;k<26;k++){
37 if (game[k][j]==' '){
38 if(gk[k][j]==0)gk[k][j]=2;
39 }
40 else break;
41 }
42
43 for (int k=j-1;k>=0;k--){
44 if (game[i][k]==' '){
45 if(gk[i][k]==0)gk[i][k]=2;
46 }
47 else break;
48 }
49 for (int k=j+1;k<26;k++){
50 if (game[i][k]==' '){
51 if(gk[i][k]==0)gk[i][k]=2;
52 }
53 else break;
54 }
55 }
56 //對gk[i][j]為2的四個方向是空格的標為3
57 for (int i=1;i<26;i++)
58 for (int j=1;j<26;j++)
59 if (gk[i][j]==2){
60 for (int k=i-1;k>=0;k--){
61 if (game[k][j]==' '){
62 if(gk[k][j]==0)gk[k][j]=3;
63 }
64 else break;
65 }
66 for (int k=i+1;k<26;k++){
67 if (game[k][j]==' '){
68 if(gk[k][j]==0)gk[k][j]=3;
69 }
70 else break;
71 }
72
73 for (int k=j-1;k>=0;k--){
74 if (game[i][k]==' '){
75 if(gk[i][k]==0)gk[i][k]=3;
76 }
77 else break;
78 }
79 for (int k=j+1;k<26;k++){
80 if (game[i][k]==' '){
81 if(gk[i][k]==0)gk[i][k]=3;
82 }
83 else break;
84 }
85 }
86
87 game[x2][y2]=t;
88 if(gk[x2][y2]>0&&gk[x2][y2]<4)return true;//如果連同且拐角不超過兩個,返回true
89 if(gk[x2][y2]==0) return false; //否則返回false
90 }
2 {
3 memset(gk,0,sizeof(gk));
4 char t=game[x2][y2];
5 game[x2][y2]=' ';
6 gk[x1][y1]=1;
7 //對game[x1][y1]四個方向是空格的標為1
8 for (int i=x1-1;i>=0;i--){
9 if(game[i][y1]==' ')gk[i][y1]=1;
10 else break;
11 }
12 for (int j=x1+1;j<26;j++){
13 if(game[j][y1]==' ')gk[j][y1]=1;
14 else break;
15 }
16
17 for (int i=y1-1;i>=0;i--){
18 if(game[x1][i]==' ')gk[x1][i]=1;
19 else break;
20 }
21 for (int i=y1+1;i<26;i++){
22 if(game[x1][i]==' ')gk[x1][i]=1;
23 else break;
24 }
25
26 //對gk[i][j]為1的四個方向是空格的標為2
27 for (int i=1;i<26;i++)
28 for (int j=1;j<26;j++)
29 if (gk[i][j]==1){
30 for (int k=i-1;k>=0;k--){
31 if (game[k][j]==' '){
32 if(gk[k][j]==0)gk[k][j]=2;
33 }
34 else break;
35 }
36 for (int k=i+1;k<26;k++){
37 if (game[k][j]==' '){
38 if(gk[k][j]==0)gk[k][j]=2;
39 }
40 else break;
41 }
42
43 for (int k=j-1;k>=0;k--){
44 if (game[i][k]==' '){
45 if(gk[i][k]==0)gk[i][k]=2;
46 }
47 else break;
48 }
49 for (int k=j+1;k<26;k++){
50 if (game[i][k]==' '){
51 if(gk[i][k]==0)gk[i][k]=2;
52 }
53 else break;
54 }
55 }
56 //對gk[i][j]為2的四個方向是空格的標為3
57 for (int i=1;i<26;i++)
58 for (int j=1;j<26;j++)
59 if (gk[i][j]==2){
60 for (int k=i-1;k>=0;k--){
61 if (game[k][j]==' '){
62 if(gk[k][j]==0)gk[k][j]=3;
63 }
64 else break;
65 }
66 for (int k=i+1;k<26;k++){
67 if (game[k][j]==' '){
68 if(gk[k][j]==0)gk[k][j]=3;
69 }
70 else break;
71 }
72
73 for (int k=j-1;k>=0;k--){
74 if (game[i][k]==' '){
75 if(gk[i][k]==0)gk[i][k]=3;
76 }
77 else break;
78 }
79 for (int k=j+1;k<26;k++){
80 if (game[i][k]==' '){
81 if(gk[i][k]==0)gk[i][k]=3;
82 }
83 else break;
84 }
85 }
86
87 game[x2][y2]=t;
88 if(gk[x2][y2]>0&&gk[x2][y2]<4)return true;//如果連同且拐角不超過兩個,返回true
89 if(gk[x2][y2]==0) return false; //否則返回false
90 }
詞組縮寫
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2256 Accepted Submission(s): 685
Problem Description
定義:一個詞組中每個單詞的首字母的大寫組合稱為該詞組的縮寫。
比如,C語言里常用的EOF就是end of file的縮寫。
比如,C語言里常用的EOF就是end of file的縮寫。
Input
輸入的第一行是一個整數(shù)T,表示一共有T組測試數(shù)據(jù);
接下來有T行,每組測試數(shù)據(jù)占一行,每行有一個詞組,每個詞組由一個或多個單詞組成;每組的單詞個數(shù)不超過10個,每個單詞有一個或多個大寫或小寫字母組成;
單詞長度不超過10,由一個或多個空格分隔這些單詞。
接下來有T行,每組測試數(shù)據(jù)占一行,每行有一個詞組,每個詞組由一個或多個單詞組成;每組的單詞個數(shù)不超過10個,每個單詞有一個或多個大寫或小寫字母組成;
單詞長度不超過10,由一個或多個空格分隔這些單詞。
Output
請為每組測試數(shù)據(jù)輸出規(guī)定的縮寫,每組輸出占一行。
Sample Input
1 end of file
Sample Output
EOF
1 #include<iostream>
2 #include<string>
3 using namespace std;
4 char change(char c)
5 {
6 if(c>='a'&&c<='z')return (c-32);
7 else if(c>='A'&&c<='Z')return c;
8 }
9 int main(){
10 int t;
11 char a[200];
12 cin>>t;
13 getchar();
14 for (int j=0;j<t;j++)
15 {
16 gets(a);
17 int n = strlen(a);
18 if(n==1)cout<<change(a[0])<<endl;
19 else {
20 for (int i=1;i<n;i++)
21 {
22 if(a[i-1]==' '&&a[i]!=' ') cout<<change(a[i]);
23 if(a[i-1]!=' '&&i==1) cout<<change(a[i-1]);
24 }
25 cout<<endl;
26 }
27 memset(a,0,sizeof(a));
28 }
29 return 0;
30 }
31
2 #include<string>
3 using namespace std;
4 char change(char c)
5 {
6 if(c>='a'&&c<='z')return (c-32);
7 else if(c>='A'&&c<='Z')return c;
8 }
9 int main(){
10 int t;
11 char a[200];
12 cin>>t;
13 getchar();
14 for (int j=0;j<t;j++)
15 {
16 gets(a);
17 int n = strlen(a);
18 if(n==1)cout<<change(a[0])<<endl;
19 else {
20 for (int i=1;i<n;i++)
21 {
22 if(a[i-1]==' '&&a[i]!=' ') cout<<change(a[i]);
23 if(a[i-1]!=' '&&i==1) cout<<change(a[i-1]);
24 }
25 cout<<endl;
26 }
27 memset(a,0,sizeof(a));
28 }
29 return 0;
30 }
31
{A} + {B}
Problem : 1412 ( {A} + {B} ) Judge Status : Accepted
RunId : 2507648 Language : G++ Author : luxiuyuan
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
RunId : 2507648 Language : G++ Author : luxiuyuan
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
Problem Description
給你兩個集合,要求{A} + {B}.
注:同一個集合中不會有兩個相同的元素.
注:同一個集合中不會有兩個相同的元素.
Input
每組輸入數(shù)據(jù)分為三行,第一行有兩個數(shù)字n,m(0<n,m<=10000),分別表示集合A和集合B的元素個數(shù).后兩行分別表示集合A和集合B.每個元素為不超出int范圍的整數(shù),每個元素之間有一個空格隔開.
Output
針對每組數(shù)據(jù)輸出一行數(shù)據(jù),表示合并后的集合,要求從小到大輸出,每個元素之間有一個空格隔開.
Sample Input
1 2 1 2 3 1 2 1 1 2
Sample Output
1 2 3 1 2
呵呵~~這是一個簡單的問題:
1 #include<iostream>
2 using namespace std;
3 int main(){
4 int a[20003];
5 int n,m;
6 while (cin>>n>>m)
7 {
8 memset(a,0,sizeof(a));
9 int i=0,j=0;
10 for (i=0;i<n;i++)
11 cin>>a[i];
12 for (j=0;j<m;i++,j++)
13 cin>>a[i];
14 sort(a,a+i);
15 int f = 0;
16 for (j=0;j<i;j++)
17 {
18 if(a[j]==a[j+1])continue;
19 if(a[j]!=a[j+1]) f++;
20 if(f>1)cout<<' ';
21 cout<<a[j];
22 }
23 cout<<endl;
24 }
25 return 0;
26 }
27
2 using namespace std;
3 int main(){
4 int a[20003];
5 int n,m;
6 while (cin>>n>>m)
7 {
8 memset(a,0,sizeof(a));
9 int i=0,j=0;
10 for (i=0;i<n;i++)
11 cin>>a[i];
12 for (j=0;j<m;i++,j++)
13 cin>>a[i];
14 sort(a,a+i);
15 int f = 0;
16 for (j=0;j<i;j++)
17 {
18 if(a[j]==a[j+1])continue;
19 if(a[j]!=a[j+1]) f++;
20 if(f>1)cout<<' ';
21 cout<<a[j];
22 }
23 cout<<endl;
24 }
25 return 0;
26 }
27
| |||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
|---|---|---|---|---|---|---|---|---|---|
| 30 | 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 | 1 | 2 | 3 | |||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
轉(zhuǎn)載,請標明出處!謝謝~~
常用鏈接
留言簿(1)
隨筆分類
隨筆檔案
文章檔案
搜索
最新評論

- 1.?re: HDU 2433 最短路
-
@test
的確這組數(shù)據(jù)應(yīng)該輸出20的 - --YueYueZha
- 2.?re: HDU 2433 最短路
-
這方法應(yīng)該不對。 看下面這組數(shù)據(jù)
4 4
1 2
2 3
3 4
2 4
畫個圖,刪去最后一條邊 2 4 后的結(jié)果應(yīng)該是20,但是此方法的輸出是19 - --test
- 3.?re: HDU 2433 最短路
-
ans = ans + sum_u + sum_v - sum[u] - sum[v],
這個公式不是很理解啊,不知道博主怎么想的啊,謝謝咯 - --姜
- 4.?re: HDU 2433 最短路
-
@attacker
the i-th line is the new SUM after the i-th road is destroyed - --路修遠
- 5.?re: HDU 2433 最短路
- 你這樣可以AC????刪除<U,V>不僅改變 u,v最短路啊、、、求解
- --attacker

