2868:你头像好乖啊

【SWUSTOJ】OJ解析(学习日记(自用

2868: 你头像好乖啊

原题链接

规律:
n为奇数 A就一定会赢。
n为偶数时,
n为2时,A一定会输。
n的因子只有偶数因子时,会平局;
剩下的就是 含有奇数因子的n,会赢;

//学长的代码
#include<iostream>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int T,len;
ll n,arr[N];
int main(){
    ios::sync_with_stdio(false);
    for(ll x=2;x<=1e10;x*=2)
        arr[++len]=x;
    while(cin>>T){
        while(T--){
            cin>>n;
            if(n==2){
                cout<<"NO"<<endl;
            }else if(n%2){
                cout<<"YES"<<endl;
            }else{
                int flag=0;
                for(int i=1;i<=len;i++){
                    if(arr[i]==n){
                        flag=1;
                        break;
                    }
                }
                if(flag)    cout<<"PING"<<endl;
                else        cout<<"YES"<<endl;
            }
        }
    }
    return 0;
}

我的代码比较笨,嘤嘤嘤:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	 ios::sync_with_stdio(false); 
	int T;
	long long n,a[40];
	a[0]=1;
	for(int i=1;i<=39;i++)
		a[i]=2*a[i-1];
	cin>>T;
	while(T--){
		cin>>n;
		int f=0;
			if(n==2)
			cout<<"NO\n";
		else if(n%2==1)
			cout<<"YES\n";
		else
		{
			
			for(int i=1;i<39;i++)
				{
					if(n==a[i])
						f++;
				}
			if(f==1)
				cout<<"PING\n";
			else
				cout<<"YES\n";
		}
		}
	return 0;
}

详细的解析(侵权删)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值