判断一个指定的程序是一直运行下去还是会停止。停止好判断,就是如何判断是否会一直运行下去。当第二次到达第n步的时候,如果此时的r仍然是第一次到达第n步时候的r,那么这个程序会一直运行下去。
通过这道题还知道了对bool类型的数组处理是比对int类型的数组处理快的。全局变量是比局部变量可以申请的内存多的。
代码:
#include <iostream>
#include <cstring>
using namespace std;
const int inf=1e4+7;
bool a[10003][257]; //全局变量。
struct node
{
string str;
int v,k;
}arr[inf]; //还要考虑只有一条语句的时候。也就是没有add的时候。循环的时候一直没变。
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
int flag=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>arr[i].str ;
scanf("%d",&arr[i].v);
if(arr[i].str !="add")
scanf("%d",&arr[i].k );
}
int p=1,flag1=0,r=0;
memset(a,0,sizeof(a));
int i=1,j,k;
while( p!=n+1 )
{
if( a[p][r] ==1 )
{
printf("No\n");
goto x;
}
a[p][r]=1;
if(arr[p].str =="add")
{
r=(r+arr[p].v )%256;
p=p+1;
}
else if(arr[p].str =="beq")
{
if(arr[p].v ==r)
p=arr[p].k ;
else
p=p+1;
}
else if(arr[p].str =="bne")
{
if(arr[p].v!=r)
p=arr[p].k;
else
p=p+1;
}
else if(arr[p].str =="blt")
{
if(r<arr[p].v)
p=arr[p].k;
else
p=p+1;
}
else if(arr[p].str=="bgt")
{
if(r>arr[p].v)
p=arr[p].k;
else
p=p+1;
}
}
printf("Yes\n");
x:;
}
return 0;
}