打个表记录物理攻击,只得了40,求助
查看原帖
打个表记录物理攻击,只得了40,求助
1258807
regenerater楼主2024/11/20 22:06

数组a记录了物理攻击i次减少的总血量,只能够得40分,求解答

#include<iostream>
using namespace std;
int t,h,k;
int sum=1,a[20];
bool Prime(int n) {
	if(n==1) return 0;
	for(int i=2; i*i<=n; i++) {
		if(n%i==0) return 0;
	}
	return 1;
}
//1 3 7 15 31 63 127 255 511 1023 2047 4095 8191 16383 32767 65535 131071 262143
int main() {
	for(int i=1; i<=18; i++) {
		sum*=2;
		a[i]=sum-1;
	}
	cin>>t;
	for(int i=1; i<=t; i++) {
		cin>>h;
		if(Prime(h)){
			cout<<1;
			continue;
		}
		bool flag=0;
		for(int j=1; j<=18&&(h>=a[j]); j++) {
			if(h-a[j]==0) {
				k=j;
				flag=1;
				break;
			}
			if(Prime(h-a[j])){
				k=j+1;
				flag=1;
				break;
			}
		}
		if(flag){
			cout<<k<<endl;
		}else{
			cout<<-1<<endl;
		}
	}
	return 0;
}

2024/11/20 22:06
加载中...