zoukankan      html  css  js  c++  java
  • OpenJudge计算概论-排队游戏【这个用到了栈的思想】

    /*========================================================================
    排队游戏
    总时间限制: 1000ms 内存限制: 65536kB
    描述
    在幼儿园中,老师安排小朋友做一个排队的游戏。首先老师精心的把数目相同的小男孩和小女孩编排在一个队列中,每个小孩按其在队列中的位置发给一个编号(编 号从0开始)。然后老师告诉小朋友们,站在前边的小男孩可以和他后边相邻的小女孩手拉手离开队列,剩余的小朋友重新站拢,再按前后相邻的小男孩小女孩手拉 手离开队列游戏,如此往复。由于教师精心的安排,恰好可以保证每两个小朋友都能手拉手离开队列,并且最后离开的两个小朋友是编号最小的和最大的两个小朋 友。(注:只有小男孩在前,小女孩在后,且他们两之间没有其他的小朋友,他们才能手拉手离开队列)。请根据老师的排队,按小女孩编号从小到大的顺序,给出 所有手拉手离开队列的小男孩和小女孩的编号对。
    
    输入
    用一个字符串代表小朋友队列。字符串中只会出现两个字符,分别代表小男孩和小女孩,首先出现的字符代表小男孩,另一个字符代表小女孩。小孩总数不超过100
    输出
    按小女孩编号顺序,顺序输出手拉手离开队列的小男孩和小女孩的编号对,每行一对编号,编号之间用一个空格分隔。
    样例输入
    ((()(())())(()))
    样例输出
    2 3
    5 6
    4 7
    8 9
    1 10
    12 13
    11 14
    0 15
    
    解析:这个题要用到栈的思想。但注意,女生和男生在队列里出现的顺序
    不合适则可能会使得 部分女生没法往前找到 对应的男生离开队列。
    比如下面的输入:
    aaabbbbbbbaaaa
    前三个男生跟他们后面的三个女生离开,这样一来 ,后面的四个女生没法往前面找到对应
    的男生一起离开。 因为还有四个男生在后面还没进栈。
    我下面的代码对此的处理就是直接return 结束程序了。这样处理不是很好,但这个情况在
    题目里面 没说怎么处理,而且题目本意似乎不该有这样的输入的。再说了,这个处理方法竟然AC了。 
    ==========================================================================*/
    #include<stdio.h>
    struct stu
    {
        int number;
        char xingBie;
    };
    int main()
    {
        char boy,ch;
        int end=0,num=0;
        struct stu a[55];
        freopen("6.in","r",stdin);
        scanf("%c",&boy);
        a[0].xingBie=boy;
        a[0].number=num;
        while(scanf("%c",&ch)!=EOF)
        {
            if(ch==boy)
            {
                end++;
                num++;
                a[end].xingBie=ch;
                a[end].number=num;
                
            }
            else
            {
                num++;
                printf("%d %d
    ",a[end].number,num);
                end--;
                if(end<0)
                    return 0;
            }
        }
        return 0;
    }

     递归的代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 char str[110];
     5 int len;
     6 char boy;
     7 
     8 int fun(int nowIndex);
     9 int main(int argc, char *argv[])
    10 {
    11     freopen("data.in","r",stdin);
    12     scanf("%s",str);
    13     
    14     boy=str[0];
    15     len=strlen(str);
    16     fun(0);
    17     return 0;
    18 }
    19 int fun(int nowIndex)
    20 {
    21     int girlIndex;
    22     if(nowIndex!=len)
    23     {
    24         if(str[nowIndex]==boy)
    25         {
    26             girlIndex=fun(nowIndex+1);
    27             if(girlIndex!=-1)
    28             {
    29                 printf("%d %d
    ",nowIndex,girlIndex);
    30                 return fun(girlIndex+1);//这一行的参数非常重要,一定要从girlIndex下一个位置继续扫描 
    31             }
    32         }
    33         else return nowIndex;//遇到的是代表小女孩的字符,返回其下标 
    34     }
    35     return -1;
    36 }

    上述递归代码参考了以下代码:(http://blog.csdn.net/abc8730866/article/details/56901667)

     1 #include <iostream>  
     2 using namespace std;  
     3 char man;  
     4 //参数;char str[],字符串  
     5 //int s,开始位置  
     6 //返回值:返回本层的右括号位置  
     7 int founction(char str[], int s)  
     8 {  
     9     int n;  
    10     if (str[s] != man)  
    11     {  
    12         return s;  
    13     }  
    14     else  
    15     {  
    16         n = founction(str, s + 1);  
    17         cout << s << ' ' << n << endl;  
    18         return founction(str, n + 1);  
    19     }  
    20 }  
    21 int main()  
    22 {  
    23     char str[101] = { 0 };  
    24     cin >> str;  
    25     man = str[0];  
    26     int n = founction(str, 1);  
    27     cout << "0 " << n << endl;  
    28     return 0;  
    29 }
  • 相关阅读:
    负载均衡器部署方式和工作原理
    Android 有关于* daemon not running.starting it now on port 5037 *ADB
    微信开发常用文档及参考资料
    XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象
    XML解析之sax解析案例(一)读取contact.xml文件,完整输出文档内容
    XML解析之SAX解析过程代码详解
    通过PHP current()函数获取未知字符键名数组第一个元素的值
    PHP检测链接是否是SSL连接 ,也就是判断HTTPS
    PHP反射ReflectionClass、ReflectionMethod 入门教程
    PHP 反射API说明
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/3455903.html
Copyright © 2011-2022 走看看