简单模拟题错了一个点(悬关无数个)
  • 板块P1322 logo语言
  • 楼主WZWZWZWY
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/3/22 18:43
  • 上次更新2023/10/23 20:51:09
查看原帖
简单模拟题错了一个点(悬关无数个)
704668
WZWZWZWY楼主2023/3/22 18:43

第八个点不对。。

请求一组数据或者帮我挑挑毛病吧,谢谢大佬们QAQ。。。

#include <bits/stdc++.h>
using namespace std;
long long x,q,i,work();
string s;
void qq(){
	while(s[i]<'0'||s[i]>'9'){i++;}
	q=0;
	while(s[i]>='0' && s[i] <= '9'){
		q = q*10 + (s[i]-'0');
		i++;
	}
}

void FD(){
	qq();
	x += q;
}
void BK(){
	qq();
	x -= q;
}
void REPEAT(){
	qq();
	while(s[i] == ' ') i++;  //读一下多余的空格,不过好像没用
	int ji = i;//必须记录i的值,因为循环过程中i会变
	if (s[i] == '['){
		int jq = q;//q的值要记录
		for (long long j = 1; j <= jq; j++){
			i = ji+1;//跳过左括号[
			work();
		}	
	}
}
long long work(){
	while(i < s.size()){
		if (s[i] == 'F') FD();
		if (s[i] == 'B') BK();
		if (s[i] == 'R') REPEAT();
		if (s[i] == ']') {//else if不对  REPEAT 5[FD 100] FD 10
			i++;//REPEAT 5[FD 50 REPEAT 10[FD 100] BK 1] 
			return 1;
		}
		i++;
	}
}
int main()
{
	getline(cin,s);
	work();
	cout << abs(x);
}
2023/3/22 18:43
加载中...