其实感觉不太难,读懂题意就行,我一开始没有仔细去读感觉就很懵。其题目意思就是一段字符串含有数字和'<'或者'>',一开始从左开始遍历,遇到'>'这类东西换方向,如果有多次遇到就删之前那一个;遇到数字就记下,并减去,一直减到0,就删掉
思路:无非用一个int类型的数组存放数字打印个数,以及模拟这个过程,
代码:
#include<stdio.h>
#include<string.h>
/*之前没有认真看题目*/
char x[110],y[110];
/*两个字符窜数组,一个在过程中变化*/
int main(){
int i,j,l,r,n,q;
while(~scanf("%d%d",&n,&q)){
scanf("%s",&x);
while(q--){
int d=1,dp=n,s[10]={0};
//d用来表示往那边走,dp=n,先放一个无关的变量
//后面用来表记可能删掉的,s初始化
scanf("%d%d",&l,&r);
l--,r--;
strcpy(y,x);
//复制过来。
for(i=l;i>=l&&i<=r;i+=d){
if('0'<=y[i]&&y[i]<='9'){
s[y[i]-'0']++;
//相应++,打印后都减减,
//其中小于0后不会讨论,相当于删去
y[i]--;
dp=n;
//遇到数字了,就将dp抛出
}
if(y[i]=='<'||y[i]=='>'){
//遇到贴别情况
if(y[dp]=='<')
//之前上一次也是这样就删掉,
y[dp]=0;
else if(y[dp]=='>')
y[dp]=0;
dp=i;
//标记
if(y[i]=='<')d=-1;
else d=1;
//方向
}
}
printf("%d",s[0]);
for(i=1;i<10;i++)
printf(" %d",s[i]);
printf("\n");
}
}
return 0;
}
[我没读懂题目后借鉴的代码](http://blog.csdn.net/weixin_44941429/article/details/102381372 "我没读懂题目后借鉴的代码")
标签:遇到,int,scanf,d%,ZCMU,--,1038,dp
From: https://www.cnblogs.com/hai-zei/p/18103843