天梯

L1-6 吃火锅

#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<sstream>
using namespace std;

int main(){
    string s,str;
    str="chi1 huo3 guo1";
    int cnt1=0,cnt2=0,flag=0;
    while(getline(cin,s)&&s!="."){
            cnt1++;
            if(s.find(str)!=string::npos){
                if(!cnt2){
                    flag=cnt1;
                }
                cnt2++;
            }
    }
    cout<<cnt1<<endl;
    if(!cnt2){
        cout<<"-_-#"<<endl;
    }else{
        cout<<flag<<" "<<cnt2<<endl;    
    }
    return 0;
} 

 L1-8 估值一亿的AI核心代码 (20 分)

题意:本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:

  • 无论用户说什么,首先把对方说的话在一行中原样打印出来;
  • 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
  • 把原文中所有大写英文字母变成小写,除了 I
  • 把原文中所有独立的 can youcould you 对应地换成 I canI could—— 这里“独立”是指被空格或标点符号分隔开的单词;
  • 把原文中所有独立的 I 和 me 换成 you
  • 把原文中所有的问号 ? 换成惊叹号 !
  • 在一行中输出替换后的句子作为 AI 的回答。

题解:把除 ‘ I ' 的大写字母改为小写字母,在每个非字母和数字之前加空格,用stringstream消除单词间的空格。还要在输出每个单词时判断第一个字符是不是标点符号如果是在这个单词前不能输出空格。

这是第二次补了,这次记得是用stringstream,判断条件又写错了

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<string>
#include<cmath>
using namespace std;
int main(){
    int n;
    cin >> n;
    getchar();
    string s,ts;
    stringstream ss;
    while(n--){
        string str[1010];
        getline(cin,s);
        cout<<s<<endl;
        for(int i=0;i<s.size();i++){
            if(isalnum(s[i])){
                if(s[i]!='I')
                    s[i]=tolower(s[i]);
            }else{
                s.insert(i," ");
                i++;
            }
            if(s[i]=='?'){
                s[i]='!';
            }     
        }
        ss.clear();
        ss<<s;
        int cnt=0;
        while(ss>>ts){
            str[cnt++]=ts;
        }
        cout<<"AI:";
        if(!isalnum(str[0][0])){
            cout<<" ";
        }      
        for(int i=0;i<cnt;++i){
            if(!isalnum(str[i][0])){ 
                cout<<str[i];
            }else if((str[i]=="can"||str[i]=="could")&&str[i+1]=="you"){
                cout<<" I " <<str[i];
                i++;
            }else if(str[i]=="I"||str[i]=="me"){
                cout<<" you";
            }else{
                cout<<" "<<str[i];
            }        
        }
        cout<<endl;
    }
        return 0;
}

L2-彩虹瓶

给定的入栈序列,判断是否可以顺序出栈,并且栈容量不超过指定大小。

#include<bits/stdc++.h>
#include<stack> 
using namespace std;
int main(){
    int n,m,k;
    cin>>n>>m>>k;
    int x;
    for(int i=1;i<=k;i++){
        int flag=0,cnt=1;
        stack<int>s;
        for(int j=1;j<=n;j++){
            cin>>x;
            if(x==cnt){
                cnt++;
                while(s.size()){
                    if(s.top()==cnt){
                        s.pop();
                        cnt++;
                    }else{
                        break;
                    }
                }
            }else{
                s.push(x);
                if(s.size()>m){
                    flag=1;
                }
            }
        }
            if(!flag&&!s.size()){
                cout<<"YES"<<endl;
            }else{
                cout<<"NO"<<endl;
            }
    }
    return 0;
} 

 

posted @ 2021-03-28 19:55  Endeavo_r  阅读(88)  评论(0)    收藏  举报