题解 AT_kupc2014_b 数当てゲーム
ImmatureDreamer · · 题解
Solution
Examples
给出官方样例:
Ideas
可以找出
对于一个质数
可以直接乘,因为各质数是互质的。
可以发现这种方案
Code
贴心批注版:
#include <iostream>
using namespace std;
int r=1, f;
int main(){
for(int i=2; i<1001; ++i){ // PIN 是 1 到 1000 的整数
f=0;
for(int j=2; j*j<1+i; ++j) if(i%j==0){f=1; break;} // 质数检查,整除说明合数
if(f<1){ // 说明是质数
int h=i; // 当前要向 AI 提问的数字
while(h<1001){
cout<<"? "<<h<<'\n'; // 提问
char state; cin>>state; // AI 的答案
if(state=='Y') h*=i, r*=i; // Y 说明可以被整除,那么乘以这个质数
else break; // 不能整除就去掉
}
}
}
cout<<"! "<<r<<'\n'; // 最终输出最小公倍数 r,at 不换行,爆 0 两行泪
return 0;
}
纯洁无污染版:
#include <iostream>
using namespace std;
int r=1, f;
int main(){
for(int i=2; i<1001; ++i){
f=0;
for(int j=2; j*j<1+i; ++j) if(i%j==0){f=1; break;}
if(f<1){
int h=i;
while(h<1001){
cout<<"? "<<h<<'\n';
char state; cin>>state;
if(state=='Y') h*=i, r*=i;
else break;
}
}
}
cout<<"! "<<r<<'\n';
return 0;
}
谢谢观看,有些不明白欢迎在评论区留言,我会一一回答。
小可的