2018 青岛网络赛C题Halting Problem
判断一个指定的程序是一直运行下去还是会停止。停止好判断,就是如何判断是否会一直运行下去。当第二次到达第n步的时候,如果此时的r仍然是第一次到达第n步时候的r,那么这个程序会一直运行下去。
通过这道题还知道了对bool类型的数组处理是比对int类型的数组处理快的。全局变量是比局部变量可以申请的内存多的。
代码:
#include
#include
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
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;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
