zoukankan      html  css  js  c++  java
  • 天天快乐编程集训队2021暑假训练-0804-字符串题解

    本次训练内容为字符串,有一定难度,但是也都是可以做的。

    1.5473 学习之正确率

    本题细节比较多,Waiting、Judging、System Error均不考虑在内。
    我们可以设置一个总题数的袋子,还有一个Accepted的袋子,正确率=正确的/总数
    注意输入包含多组,而且n后面的换行要吃掉。
    还有总题数可能是0,可能会除0错误,需要特判。
    当然这段时间只要有正确的,那么正确率最低为1%,这点也需要特别判断出来。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        while(cin>>n)
        {
            int num1=0,num2=0;
            cin.get();
            for(int i=0;i<n;i++)
            {
                string s;
                getline(cin,s);
                if(s=="Accepted")
                    num1++;
                if(s!="Waiting"&&s!="Judging"&&s!="System Error")
                    num2++;    
            }
            //总题数是0
            if(num2==0)
            {
                cout<<"0%"<<endl;
            }
            else
            {
                //求出比率
                int k=num1*100/num2;
                if(k<1&&num1)k=1;
                cout<<k<<"%"<<endl;
            }      
        }
        return 0;
    } 
    

    2.4032 删除相同字符

    我们可以用一个栈去维护当前的字符,如果相等两个均出栈即可。

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        string s;
        while(cin>>s,s!="###")
        {
            int top=0;
            char st[1005];
            for(int i=0;s[i];i++)
            {
                //进栈
                st[top++]=s[i];
                //栈上两个相等弹出
                if(top>=2&&st[top-1]==st[top-2])
                {
                    top-=2;
                }
            }
            for(int i=0;i<top;i++)
            {
                cout<<st[i];
            }
            if(top==0)cout<<"NO char !";
            cout<<"
    ";
        }
        return 0;
    }
    

    3.4675 字符串

    直接桶排标记下,map也可以。注意题目是字符是否出现过

    #include<bits/stdc++.h> 
     using namespace std;
     int main()
    { 	
    	int flag[26]={0};
    	char c;
    	while(cin>>c,c!='#')
    	{
    		flag[c-'a']=1;
    	}
    	bool flag2=true;
    	while(cin>>c,c!='#')
    	{
    		if(flag[c-'a']==0)
    		{
    			flag2=false;
    			break;
    		}
    	}
    	if(flag2)
    	cout<<"Yes"<<endl;
    	else
    	cout<<"No"<<endl;
    	return 0;
    } 
    

    4.4379 这个真不会

    还是栈,遇到-出栈一个元素,遇到@栈清空即top=0

    #include<bits/stdc++.h>
    using namespace std;
    char a[1005];
    int main()
    {
        string s;
        while(getline(cin,s))
        {
            int top=0;
            for(int i=0;s[i];i++)
            {
                if(s[i]=='#')
                {
                    if(top)top--;
                }
                else if(s[i]=='@')top=0;
                else a[top++]=s[i];
            }
            if(!top)cout<<"it is a pity!";
            else
            {
                for(int i=0;i<top;i++)cout<<a[i];
            }
            cout<<"
    ";
        }
        return 0;
    }
    

    5.5051 火星数字

    复杂模拟,分情况讨论

    6.4644 展开字符串

    复杂模拟,分情况讨论

    大佬您太强了,还请多多指教哎
  • 相关阅读:
    官场22条潜规则,职场谁说不是呢
    pomelo使用中的常见问题
    马斯诺需求金字塔
    Mac上使用brew安装nvm来支持多版本的Nodejs
    Redis 集群解决方案 Codis
    Linux下压缩某个文件夹(文件夹打包)
    使用forever运行nodejs应用
    nodejs npm常用命令
    Mac安装Brew
    C#2.0 迭代器
  • 原文地址:https://www.cnblogs.com/BobHuang/p/15098003.html
Copyright © 2011-2022 走看看