层层递进,巧用魔法,新手也看的会
2026-07-25 21:33:36
发布于:广东
7阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
bool pre(int n){//(函数)判断是否为质数
int flag=1;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
flag=0;
}
}
if(flag){
return true;
}else{
return false;
}
}
int tong[100005];//创建质数桶,初始为0
int main(){
for(int i=2;i<=100000;i++){
if(pre(i)){
tong[i]++;//如果为质数,质数桶对应的质数+1
}
}
int n;cin>>n;
for(int i=1;i<=n;i++){
int a;
cin>>a;//输入样例数据
int m=0;//每次攻击减的指数幂
int sum=0;//攻击次数
//举个例子:如果怪物HP为8,如果我们先用2次物攻(-1-2),再用1次魔攻(-5);与先用1次魔攻(-5),再用2次物攻(-1-2);没本质上的区别
while(a>0){//Hi怪物血量大于0,就持续攻击
if(tong[a]==1){//如果剩下的怪物血量为质数,就减质数(魔法攻击)
a=0;
}else{//否则就减2的m(对应题目中的i-1)次方(物理攻击)
a-=pow(2,m);
}
m++;
sum++;
}
if(a==0){//如果怪物血量=0(成功击败),就输出攻击次数,反之输出-1
cout<<sum<<endl;
}else{
cout<<"-1"<<endl;
}
}
return 0;
}
这里空空如也


有帮助,赞一个