您的位置:首页 > 其它

2016-05-10 22:02 204 查看
今天我做了一个题大约是这样的:

 输入:(多组输入)

   首先输入一个值(d)表示接下来的输入中有几个数(1 < d < 2*10^5)

   接下来输入(d)个数(数只有0和1组成)当每个数与它后也个数不同时就会使就会使这个数与其后面的数一同消失;

 输出:

   一共会剩下几个数。

 样例:

  输入:

    4

    1010

  输出:

    0

 

 

 这个题一开始我的预想使用栈的思想,没想到还是用麻烦了啊!哎!

 用栈的思想:

#include

#include

#define MAX_N 200005

char ch[MAX_N];        //题目中所要求的(d)

char stack[MAX_N];     //按要求存入的栈

int top;               //栈的顶部(也就是栈内一共有几个数)

int main()

{

    int n,i;

    while(~scanf("%d",&n))        //多组输入

    {

        scanf("%s",ch);

        top = -1;                 //先使栈顶为-1也就是空栈

        for(i = 0; i < n; i++)

        {

            if(top >= 0 && stack[top] != ch[i])   //如果栈不为空栈并且栈顶元素与将要比较的元素不相同

            {

                top--;                            //栈顶出栈

            }

            else                                  //如果栈为空或栈顶与将要比较的元素相同

            {

                stack[++top] = ch[i];             //入栈

          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: