本子君

HDU1022

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string a,b;
    int t[1001],n;
    while(cin>>n>>a>>b)
    {
        stack<char> k;
        int x=0,y=0;
        for(int i=0;i<n;i++)
        {
            k.push(a[i]);
            t[x++]=0;
            while(!k.empty() && k.top()==b[y])//栈顶与b[y]相等 
            {
                k.pop();
                y=y+1;
                t[x++]=1;
            }
        }
        if(y!=n)
            cout<<"No."<<endl;
        else
            {
                cout<<"Yes."<<endl;
                for(int i=0;i<x;i++)
                {
                    if(t[i]==0)
                        cout<<"in"<<endl;
                    else
                        cout<<"out"<<endl;
                }
            }
        cout<<"FINISH"<<endl;
    }
    return 0;
}

x++是个坑,立即使用的时候x的值没有增加,当下一次用的时候x的值才会增加。假如x的初值为0,定义一个int a[100],a[x++]是从x=0开始的

又比如最后一个for循环:

for(int i=0;i<x;i++)  这里面的x就是增加过的,所以如果这个时候写成i<=x就会多输出一个out(这里有个疑问,在main()函数外没有赋值的整形数组的初值都为0,在这里我把int t[1001];写在外面之后又运行发现确实是这样,但是写在main()内的初值为1吗,因为这样得到的输出为out)

开始没看懂in和out应该怎么输出,看了别人的代码,学习到了

今天上课讲了++的运算,之前没有系统的学习过,现在再写一点

x++:先返回再加一   ++x:先加一再返回 

x++的加一操作在下一次使用时内存中存的值就加一了

++运算的左端必须是一个变量,如a+++++b(即((a++)++)+b,根据贪心得到的)因为a++得到的是一个数值,而不是一个变量,故编译不通过(就如同1++一样,不是变量)写成a+++++b或(a++)+(++b)就行

而++++x是存在的,即进行两次++运算

posted on 2019-03-12 22:24  本子君  阅读(273)  评论(0编辑  收藏  举报

导航