A: DSKer的卡牌游戏

题目链接:http://acm.xidian.edu.cn/problem.php?id=1310

  用栈模拟整个过程,我在开始的时候先往栈中压入了一个‘m’,用来和第一个压入的y或Y判断,方便代码与后面相同,也方便栈空是的操作(原因是不怎么熟悉stack,瞎J8想 了一个操作),模拟他的全过程就好,题目没有其他难点;

  还有就是清空栈,(虽然不知道为什么第一次没有清空栈也过了),但还是觉得应该清空栈;后面一题就因为没有清空队列卡了好久;

 1 #include<stdio.h>
 2 #include<stack>
 3 #include<string.h>
 4 
 5 using namespace std;
 6 
 7 char A[1005];
 8 stack<char> S1;
 9 char B[1005];
10 
11 void dfs(int len)
12 {
13     for(int i = 0;i < len;i++)
14     {
15         int top = S1.top();
16         if(A[i] == top && A[i] == 'y')
17             {
18                 S1.pop();
19                 A[i] = 'Y';
20                 i--;
21             }
22         else if(A[i] == top && A[i] == 'Y')
23             {
24                 S1.pop();
25             }
26         else
27             S1.push(A[i]);
28     }
29 }
30 
31 
32 
33 
34 int main()
35 {
36     while(scanf("%s",A) != EOF)
37     {
38         while(!S1.empty())            //清空栈 
39         S1.pop();
40     
41         S1.push('m');
42         dfs(strlen(A));
43         int k = 0;
44         while(S1.top() != 'm')        //将栈中数据去除放到一个数组中,正序输出 
45         {
46             B[k] = S1.top();
47             S1.pop();
48             k++;
49         }
50         for(int i = k - 1;i >= 0;i--)
51             printf("%c",B[i]);
52         printf("\n");
53     }
54     return 0;
55 } 

猜你喜欢

转载自www.cnblogs.com/Dicer/p/9100777.html