给定大小为10的数组arr [] ,其中arr [i]表示数字i的频率。任务是找到不能由给定数字表示的最小正数。
例子:
Input: arr[] = {2, 1, 1, 4, 0, 6, 3, 2, 2, 2}
Output: 4
Since the count of 4th digit is 0. So 4 can not be made.
Input : arr[] = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1}
Output : 10
Since the count of 0th digit is 0. So smallest positive integer that can not be made is 10.
Input : arr[] = {2, 2, 1, 2, 1, 1, 3, 1, 1, 1}
Output : 22
To make 22 we require two 2’s but here the count of 2 is only 1.
方法:
- 从第一个索引开始计算数组中的最小值,并存储它的索引。
- 现在,将最小值与第0个索引处的值进行比较。
- 如果它在第0个索引处的值小于最小值,则不能表示10、100、1000…。
- 如果其值大于最小值,则将循环迭代到第一个最小值索引,然后简单地打印索引值。
下面是上述方法的实现:
C++
// CPP program to find the smallest positive
// number which can not be represented by given digits
#include
using namespace std;
// Function to find the smallest positive
// number which can not be represented by given digits
void expressDigit(int arr[], int n){
int min = 9, index = 0, temp = 0;
// Storing the count of 0 digit
// or store the value at 0th index
temp = arr[0];
// Calculates the min value in the array starting
// from 1st index and also store it index.
for(int i = 1; i < 10; i++){
if(arr[i] < min){
min = arr[i];
index = i;
}
}
// Now compare the min value with the
// value at 0th index.
// If its value at 0th index is less than min value
// than either 10, 100, 1000 ... can't be expressed
if(temp < min)
{
cout << 1;
for(int i = 1; i <= temp + 1; i++)
cout << 0;
}
// If it value is greater than min value than
// iterate the loop upto first min value index
// and simply print it index value.
else
{
for(int i = 0; i < min; i++)
cout << index;
cout << index;
}
}
// Driver code
int main()
{
int arr[] = {2, 2, 1, 2, 1, 1, 3, 1, 1, 1};
// Value of N is always 10 as we take digit from 0 to 9
int N = 10;
// Calling function
expressDigit(arr, N);
return 0;
}
Java
// Java program to find the smallest positive
// number which can not be represented by given digits
import java.util.*;
class GFG
{
// Function to find the smallest positive
// number which can not be represented by given digits
static void expressDigit(int arr[], int n)
{
int min = 9, index = 0, temp = 0;
// Storing the count of 0 digit
// or store the value at 0th index
temp = arr[0];
// Calculates the min value in the array starting
// from 1st index and also store it index.
for(int i = 1; i < 10; i++)
{
if(arr[i] < min)
{
min = arr[i];
index = i;
}
}
// Now compare the min value with the
// value at 0th index.
// If its value at 0th index is less than min value
// than either 10, 100, 1000 ... can't be expressed
if(temp < min)
{
System.out.print(1);
for(int i = 1; i <= temp + 1; i++)
System.out.print(0);
}
// If it value is greater than min value than
// iterate the loop upto first min value index
// and simply print it index value.
else
{
for(int i = 0; i < min; i++)
System.out.print(index);
System.out.print(index);
}
}
// Driver code
public static void main(String[] args)
{
int arr[] = {2, 2, 1, 2, 1, 1, 3, 1, 1, 1};
// Value of N is always 10
// as we take digit from 0 to 9
int N = 10;
// Calling function
expressDigit(arr, N);
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 program to find the
# smallest positive number which
# can not be represented by given digits
# Function to find the smallest
# positive number which can not be
# represented by given digits
def expressDigit(arr, n):
min = 9
index = 0
temp = 0
# Storing the count of 0 digit
# or store the value at 0th index
temp = arr[0]
# Calculates the min value in
# the array starting from
# 1st index and also store its index.
for i in range(1, 10):
if(arr[i] < min):
min = arr[i]
index = i
# Now compare the min value with the
# value at 0th index.
# If its value at 0th index is
# less than min value than either
# 10, 100, 1000 ... can't be expressed
if(temp < min):
print(1, end = "")
for i in range(1, temp + 1):
print(0, end = "")
# If its value is greater than
# min value then iterate the loop
# upto first min value index and
# simply print its index value.
else:
for i in range(min):
print(index, end = "")
print(index)
# Driver code
arr = [2, 2, 1, 2, 1,
1, 3, 1, 1, 1]
# Value of N is always 10
# as we take digit from 0 to 9
N = 10
# Calling function
expressDigit(arr, N)
# This code is contributed by Mohit Kumar
C#
// C# program to find the smallest positive
// number which can not be represented by given digits
using System;
class GFG
{
// Function to find the smallest positive
// number which can not be represented by given digits
static void expressDigit(int []arr, int n)
{
int min = 9, index = 0, temp = 0;
// Storing the count of 0 digit
// or store the value at 0th index
temp = arr[0];
// Calculates the min value in the array starting
// from 1st index and also store it index.
for(int i = 1; i < 10; i++)
{
if(arr[i] < min)
{
min = arr[i];
index = i;
}
}
// Now compare the min value with the
// value at 0th index.
// If its value at 0th index is less than min value
// than either 10, 100, 1000 ... can't be expressed
if(temp < min)
{
Console.Write(1);
for(int i = 1; i <= temp + 1; i++)
Console.Write(0);
}
// If it value is greater than min value than
// iterate the loop upto first min value index
// and simply print it index value.
else
{
for(int i = 0; i < min; i++)
Console.Write(index);
Console.Write(index);
}
}
// Driver code
public static void Main(String[] args)
{
int []arr = {2, 2, 1, 2, 1, 1, 3, 1, 1, 1};
// Value of N is always 10
// as we take digit from 0 to 9
int N = 10;
// Calling function
expressDigit(arr, N);
}
}
// This code is contributed by 29AjayKumar
Javascript
输出:
22