给定整数N。您可以从该数字中选择任意两个数字(数字可以相同,但位置应不同),并以两种可能的方式中的任何一种对其进行排序。对于上述每种方式,您都可以从中创建一个两位数的数字(可能包含前导零)。然后,将选择对应于ASCII值的字符等于该数字,即数字65个对应于“A”,66〜“B”等等。任务是计算以这种方式可以选择的英文字母(小写或大写)的数量。
例子:
Input: N = 656
Output: 2
Only the characters ‘A’ (65) and ‘B’ (66) are possible.
Input: N = 1623455078
Output: 27
方法:想法是观察到可能的字符总数为(26个小写字母+ 26个大写字母= 52)。因此,请检查这52个字符的出现,而不是从N生成两位数字的所有可能组合。
因此,计算N中每个数字的出现,然后针对每个字符(小写或大写),找到其ASCII值,并检查是否可以从给定的数字中选取它。最后打印此类字母的计数。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function that returns true if num
// can be formed with the digits in
// digits[] array
bool canBePicked(int digits[], int num)
{
int copyDigits[10];
// Copy of the digits array
for(int i =0 ; i < 10;i++)
copyDigits[i]=digits[i];
while (num > 0)
{
// Get last digit
int digit = num % 10;
// If digit array doesn't contain
// current digit
if (copyDigits[digit] == 0)
return false;
// One occurrence is used
else
copyDigits[digit] -= 1;
// Remove the last digit
num = floor(num / 10);
}
return true;
}
// Function to return the count of
// required alphabets
int countAlphabets(long n)
{
int count = 0;
// To store the occurrences of
// digits (0 - 9)
int digits[10]= {0};
while (n > 0)
{
// Get last digit
int digit = n % 10;
// Update the occurrence of the digit
digits[digit] += 1;
// Remove the last digit
n = floor(n / 10);
}
// If any lowercase character can be
// picked from the current digits
for(int i = 97; i <= 122 ;i ++)
if (canBePicked(digits, i))
count += 1;
// If any uppercase character can be
// picked from the current digits
for(int i = 65; i < 91;i++)
if (canBePicked(digits, i))
count += 1;
// Return the required count
// of alphabets
return count;
}
// Driver code
int main()
{
long n = 1623455078;
cout<<(countAlphabets(n));
}
// This code is contributed by chitranayal
Java
// Java implementation of the approach
class GFG {
// Function that returns true if num can be formed
// with the digits in digits[] array
static boolean canBePicked(int digits[], int num)
{
// Copy of the digits array
int copyDigits[] = digits.clone();
while (num > 0) {
// Get last digit
int digit = num % 10;
// If digit array doesn't contain current digit
if (copyDigits[digit] == 0)
return false;
// One occurrence is used
else
copyDigits[digit]--;
// Remove the last digit
num /= 10;
}
return true;
}
// Function to return the count of required alphabets
static int countAlphabets(int n)
{
int i, count = 0;
// To store the occurrences of digits (0 - 9)
int digits[] = new int[10];
while (n > 0) {
// Get last digit
int digit = n % 10;
// Update the occurrence of the digit
digits[digit]++;
// Remove the last digit
n /= 10;
}
// If any lowercase character can be picked
// from the current digits
for (i = 'a'; i <= 'z'; i++)
if (canBePicked(digits, i))
count++;
// If any uppercase character can be picked
// from the current digits
for (i = 'A'; i <= 'Z'; i++)
if (canBePicked(digits, i))
count++;
// Return the required count of alphabets
return count;
}
// Driver code
public static void main(String[] args)
{
int n = 1623455078;
System.out.println(countAlphabets(n));
}
}
Python3
# Python3 implementation of the approach
import math
# Function that returns true if num
# can be formed with the digits in
# digits[] array
def canBePicked(digits, num):
copyDigits = [];
# Copy of the digits array
for i in range(len(digits)):
copyDigits.append(digits[i]);
while (num > 0):
# Get last digit
digit = num % 10;
# If digit array doesn't contain
# current digit
if (copyDigits[digit] == 0):
return False;
# One occurrence is used
else:
copyDigits[digit] -= 1;
# Remove the last digit
num = math.floor(num / 10);
return True;
# Function to return the count of
# required alphabets
def countAlphabets(n):
count = 0;
# To store the occurrences of
# digits (0 - 9)
digits = [0] * 10;
while (n > 0):
# Get last digit
digit = n % 10;
# Update the occurrence of the digit
digits[digit] += 1;
# Remove the last digit
n = math.floor(n / 10);
# If any lowercase character can be
# picked from the current digits
for i in range(ord('a'), ord('z') + 1):
if (canBePicked(digits, i)):
count += 1;
# If any uppercase character can be
# picked from the current digits
for i in range(ord('A'), ord('Z') + 1):
if (canBePicked(digits, i)):
count += 1;
# Return the required count
# of alphabets
return count;
# Driver code
n = 1623455078;
print(countAlphabets(n));
# This code is contributed by mits
C#
// C# implementation of the approach
using System;
class GFG
{
// Function that returns true
// if num can be formed with
// the digits in digits[] array
static bool canBePicked(int []digits, int num)
{
// Copy of the digits array
int []copyDigits = (int[]) digits.Clone();
while (num > 0)
{
// Get last digit
int digit = num % 10;
// If digit array doesn't
// contain current digit
if (copyDigits[digit] == 0)
return false;
// One occurrence is used
else
copyDigits[digit]--;
// Remove the last digit
num /= 10;
}
return true;
}
// Function to return the count
// of required alphabets
static int countAlphabets(int n)
{
int i, count = 0;
// To store the occurrences
// of digits (0 - 9)
int[] digits = new int[10];
while (n > 0)
{
// Get last digit
int digit = n % 10;
// Update the occurrence of the digit
digits[digit]++;
// Remove the last digit
n /= 10;
}
// If any lowercase character can be
// picked from the current digits
for (i = 'a'; i <= 'z'; i++)
if (canBePicked(digits, i))
count++;
// If any uppercase character can be
// picked from the current digits
for (i = 'A'; i <= 'Z'; i++)
if (canBePicked(digits, i))
count++;
// Return the required count of alphabets
return count;
}
// Driver code
public static void Main()
{
int n = 1623455078;
Console.WriteLine(countAlphabets(n));
}
}
// This code is contributed by
// tufan_gupta2000
PHP
0)
{
// Get last digit
$digit = $num % 10;
// If digit array doesn't contain
// current digit
if ($copyDigits[$digit] == 0)
return false;
// One occurrence is used
else
$copyDigits[$digit]--;
// Remove the last digit
$num = floor($num / 10);
}
return true;
}
// Function to return the count of
// required alphabets
function countAlphabets($n)
{
$count = 0;
// To store the occurrences of
// digits (0 - 9)
$digits = array_fill(0, 10, 0);
while ($n > 0)
{
// Get last digit
$digit = $n % 10;
// Update the occurrence of the digit
$digits[$digit]++;
// Remove the last digit
$n = floor($n / 10);
}
// If any lowercase character can be
// picked from the current digits
for ($i = ord('a'); $i <= ord('z'); $i++)
if (canBePicked($digits, $i))
$count++;
// If any uppercase character can be
// picked from the current digits
for ($i = ord('A');
$i <= ord('Z'); $i++)
if (canBePicked($digits, $i))
$count++;
// Return the required count
// of alphabets
return $count;
}
// Driver code
$n = 1623455078;
echo countAlphabets($n);
// This code is contributed by Ryuga
?>
输出:
27