原址链接 P5635 【CSGRound1】天下第一
先看标签
搜索?模拟?用不着这么复杂
创建函数a(int x,int y,int p)
a(int x,int y,int p){
if(x<=0){
return 1;
}
x = (x+y)%p;
if(y<=0){
return 2;
}
y = (x+y)%p;
return a(x,y,p);
}
写入主函数
#include<iostream>
using namespace std;
int p,t;
int a(int x,int y,int p){
if(x==y){
return 3;
}
if(x<=0){
return 1;
}
x = (x+y)%p;
if(y<=0){
return 2;
}
y = (x+y)%p;
}
int main()
{
cin>>t>>p;
for(int i=0;i<t;i++){
int x,y;
cin>>x>>y;
int g = a(x,y,p);
switch (g) {//这里函数是数,可以用switch()来判断
case 1:
cout<<1;
break;
case 2:
cout<<2;
break;
default:
cout<<"error";
break;
}
}
return 0;
}
提交
喜提WA
****,***,居然不能到0是平局
不继续执行怎么判断不能到0呢?
看看数据大小
假如p
是10000,x,y
是0.5
那么只让函数执行10000次就可以知道了
最终代码
C++
#include<iostream>
using namespace std;
int p,t;
int a(int x,int y,int p,int oi){
if(oi>10000){
return 3;
}
if(x<=0){
return 1;
}
x = (x+y)%p;
if(y<=0){
return 2;
}
y = (x+y)%p;
return a(x,y,p,oi+1);
}
int main()
{
cin>>t>>p;
for(int i=0;i<t;i++){
int x,y;
cin>>x>>y;
int g = a(x,y,p,0);
switch (g) {
case 1:
cout<<1<<endl;
break;
case 2:
cout<<2<<endl;
break;
default:
cout<<"error"<<endl;
break;
}
}
return 0;
}