3800.奇数还是偶数

题目描述:
给定一个整数 n,它可以被表示为一个 k 位的 b 进制数,如下所示:
在这里插入图片描述
举例说明,如果 b=17,k=3,a=[11,15,7],那么
在这里插入图片描述
请你判断 n 是奇数还是偶数。

输入格式
第一行包含整数 T,表示共有 T 组测试数据。
每组数据第一行包含两个整数 b 和 k。
第二行包含 k 个整数 a1,a2,…,ak。
n 的 b 进制表示不含前导 0,也就是说只有 k=1 时,a1 才有可能是 0。

输出格式
每组数据输出一行结果,n 是偶数则输出 even,奇数则输出 odd。

数据范围
1≤T≤10,
2≤b≤100,
1≤k≤10^5,
0≤ai<b,
同一测试点内所有 k 的和不超过 10^5。

输入样例:
4
13 3
3 2 7
10 9
1 2 3 4 5 6 7 8 9
99 5
32 92 85 74 4
2 2
1 0

输出样例:
even
odd
odd
even

思路:因为直接暴力会超时,所以要换个角度思考。
题目最后输出的是“判断n是奇数还是偶数”,根据多项式,一个奇数的k次方还是奇数,所以
如果b是奇数,求多项式的和就转变为a1b+a2b+…+b;
如果b是偶数,多项式的前n-1个数的和一定是偶数,最后只要判断b是奇数还是偶数

相关代码如下:

#include <iostream>

using namespace std;

int main(){
    int t;
    cin>>t;
    while(t--){
        int b,k;
        cin>>b>>k;
        int sum = 0;
        int flag = 0;
        for(int i=0;i<k;i++){
            int x;
            cin>>x;
            if(i <= k-2){k
                sum += x*b;    //记录前k-1个数的和
            }
            else
                flag = x;    //记录最后一个数
        }
        int res;
        res = flag;
        if(b % 2){
            res = sum + flag;
        }
        if(res % 2){
            cout<<"odd"<<endl;
        }
        else{
            cout<<"even"<<endl;
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值