sicily 7974. Integer Lists

输入一串数字序列,对其进行一系列操作:1. 反转操作;2. 删除序列第一个元素。输入格式如下:[1,2,3,4]

考虑对输入的处理,字符char 类型和int 类型交替出现,可以输入一个字符,紧接着输入一个整数,再输入一个字符。。。。在Dev-C++中测试一下,没有空格分开的情况下,两位的整数也能正确读入。
char ch;
int temp;
cin>>ch>>temp;
cout<<ch<<" "<<temp<<endl;

考虑反转操作需要花费比较多时间,可以设置一个布尔变量flag 标记序列是否被反转,每次反转只要对布尔值取反就可以了。

以为这道题就这么水过去了,谁知一直WA。。。无奈之下求助搜索工具,找到一个blog 说两位数的输入要特殊处理,当作字符串输入,再提取出数字。如此看来sicily 的环境和Dev-C++是不一样的,真是不能偷懒做些那么不可靠的尝试的。。

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <list>
#include <queue>
#include <algorithm>
using namespace std;

string op,buf;
int n;
int lis[100009];

int main(){
    int t;
    cin>>t;
    while(t--){
        cin>>op>>n>>buf;
        
        int bufLen=buf.length();
        int count=0;
        int temp=0;
        for(int i=1;i<bufLen;++i){
            if(buf[i]>='0' && buf[i]<='9'){
                temp*=10;
                temp+=buf[i]-'0';
            }
            else {
                lis[count++]=temp;
                temp=0;
            }
        }
        //for(int i=0;i<count;++i) cout<<lis[i]<<" ";
        //cout<<endl;
        
        bool flag=false,error=false;
        int start=0,end=n;     
        int len=op.length();   
        for(int i=0;i<len;++i){
            if(op[i]=='R') flag=!flag;
            else if(op[i]=='D'){
                if(start==end) {
                    error=true;
                    break;           
                }
                if(flag) end--;
                else start++;
            }
        }
        if(error){
            printf("error\n");
            continue;      
        }
        if(start==end) printf("[]\n");
        else if(flag){
            cout<<"[";
            for(int i=end-1;i>start;--i) cout<<lis[i]<<",";
            cout<<lis[start]<<"]\n";
        }
        else {
            cout<<"[" ;
            for(int i=start;i<end-1;++i) cout<<lis[i]<<",";
            cout<<lis[end-1]<<"]\n"; 
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值