给定大小为N的数组arr [] ,它表示数字的数字,整数r是给定数字的基数(基数),即n = arr [n – 1] * r 0 + arr [n – 2] * r 1 +…+ a [0] * r N – 1 。任务是查找给定数字是奇数还是偶数。
例子:
Input: arr[] = {1, 0}, r = 2
Output: Even
(10)2 = (2)10
Input: arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, r = 10
Output: Odd
天真的方法:最简单的方法是通过将数字乘以相应的底数幂来计算数字n。但是由于位数可以是10 5的数量级,因此这种方法不适用于较大的n。
高效方法:可能有两种情况。
- 如果r是偶数,则最终答案取决于最后一位,即arr [n – 1] 。
- 如果r为奇数,则我们必须计算奇数位数。如果奇数位数为偶数,则总和为偶数。否则,总和是奇数。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function that returns true if the number
// represented by arr[] is even in base r
bool isEven(int arr[], int n, int r)
{
// If the base is even, then
// the last digit is checked
if (r % 2 == 0) {
if (arr[n - 1] % 2 == 0)
return true;
}
// If base is odd, then the
// number of odd digits are checked
else {
// To store the count of odd digits
int oddCount = 0;
for (int i = 0; i < n; ++i) {
if (arr[i] % 2 != 0)
oddCount++;
}
if (oddCount % 2 == 0)
return true;
}
// Number is odd
return false;
}
// Driver code
int main()
{
int arr[] = { 1, 0 };
int n = sizeof(arr) / sizeof(arr[0]);
int r = 2;
if (isEven(arr, n, r))
cout << "Even";
else
cout << "Odd";
return 0;
}
Java
// Java implementation of the approach
import java.io.*;
class GFG
{
// Function that returns true if the number
// represented by arr[] is even in base r
static boolean isEven(int arr[], int n, int r)
{
// If the base is even, then
// the last digit is checked
if (r % 2 == 0)
{
if (arr[n - 1] % 2 == 0)
return true;
}
// If base is odd, then the
// number of odd digits are checked
else {
// To store the count of odd digits
int oddCount = 0;
for (int i = 0; i < n; ++i) {
if (arr[i] % 2 != 0)
oddCount++;
}
if (oddCount % 2 == 0)
return true;
}
// Number is odd
return false;
}
// Driver code
public static void main (String[] args)
{
int arr[] = { 1, 0 };
int n = arr.length;
int r = 2;
if (isEven(arr, n, r))
System.out.println ("Even");
else
System.out.println("Odd");
}
}
// This code is contributed by jit_t.
Python3
# Python 3 implementation of the approach
# Function that returns true if the number
# represented by arr[] is even in base r
def isEven(arr, n, r):
# If the base is even, then
# the last digit is checked
if (r % 2 == 0):
if (arr[n - 1] % 2 == 0):
return True
# If base is odd, then the
# number of odd digits are checked
else:
# To store the count of odd digits
oddCount = 0
for i in range(n):
if (arr[i] % 2 != 0):
oddCount += 1
if (oddCount % 2 == 0):
return True
# Number is odd
return False
# Driver code
if __name__ == '__main__':
arr = [1, 0]
n = len(arr)
r = 2
if (isEven(arr, n, r)):
print("Even")
else:
print("Odd")
# This code is contributed by
# Surendra_Gangwar
C#
// C# implementation of the approach
using System;
class GFG
{
// Function that returns true if the number
// represented by arr[] is even in base r
static bool isEven(int []arr, int n, int r)
{
// If the base is even, then
// the last digit is checked
if (r % 2 == 0)
{
if (arr[n - 1] % 2 == 0)
return true;
}
// If base is odd, then the
// number of odd digits are checked
else
{
// To store the count of odd digits
int oddCount = 0;
for (int i = 0; i < n; ++i)
{
if (arr[i] % 2 != 0)
oddCount++;
}
if (oddCount % 2 == 0)
return true;
}
// Number is odd
return false;
}
// Driver code
public static void Main ()
{
int []arr = { 1, 0 };
int n = arr.Length;
int r = 2;
if (isEven(arr, n, r))
Console.WriteLine ("Even");
else
Console.WriteLine("Odd");
}
}
// This code is contributed by anuj_67...
PHP
输出:
Even