给定整数N ,任务是找到以7结尾的最小数量的数字,以使这些数字的总和为N。
例子:
Input: N = 38
Output: 4
7 + 7 + 7 + 17
Input: N = 46
Output: -1
46 cannot be represented as the sum
of integers ending with 7.
Input: N = 215
Output: 5
7 + 7 + 7 + 7 + 187
方法:
- 这里的第一个观察结果是,每个大于或等于70的数字始终可以写为以7结尾的数字之和。例如,对于82 ,最后一位是2 ,因此至少需要6个以7结尾的数字,即(7 * 6 = 42)。可以创建一个数组hasharr [] ,其中hasharr [i]表示所需的最小位数,最后一位为7,因此总和的最后一位为i 。
- 如果该数字小于70,则必须检查N是否小于以数字7 7结尾的最小数字的总和。如果是,则不可能,并打印-1 ,否则,如果它大于或等于它,则打印-1 。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
const int TEN = 10;
// Function to return the count of
// minimum numbers ending with 7
// required such that the sum
// of these numbers is n
int minCount(int n)
{
// hasharr[i] will store the minimum
// numbers ending with 7 so that it
// sums to number ending with digit i
int hasharr[TEN] = { 10, 3, 6, 9, 2, 5, 8, 1, 4, 7 };
// Its always possible to write numbers > 69
// to write as numbers ending with 7
if (n > 69)
return hasharr[n % TEN];
else {
// If the number is atleast equal to the
// sum of minimum numbers ending with 7
if (n >= hasharr[n % TEN] * 7)
return (hasharr[n % TEN]);
else
return -1;
}
}
// Driver code
int main()
{
int n = 38;
cout << minCount(n);
return 0;
}
Java
// Java implementation of the above approach
class GFG {
// Function to return the count of
// minimum numbers ending with 7
// required such that the sum
// of these numbers is n
static int minCount(int n)
{
// hasharr[i] will store the minimum
// numbers ending with 7 so that it
// sums to number ending with digit i
int[] hasharr = { 10, 3, 6, 9, 2,
5, 8, 1, 4, 7 };
// Its always possible to write
// numbers > 69 to write as
// numbers ending with 7
if (n > 69)
return hasharr[n % 10];
else
{
// If the number is atleast equal
// to the sum of minimum numbers
// ending with 7
if (n >= hasharr[n % 10] * 7)
return (hasharr[n % 10]);
else
return -1;
}
}
// Driver code
public static void main (String[] args)
{
int n = 38;
System.out.println(minCount(n));
}
}
// This code is contributed by spp____
Python3
# Python3 implementation of the above approach
# Function to return the count of
# minimum numbers ending with 7
# required such that the sum
# of these numbers is n
def minCount(n):
# hasharr[i] will store the minimum
# numbers ending with 7 so that it
# sums to number ending with digit i
hasharr = [ 10, 3, 6, 9, 2,
5, 8, 1, 4, 7 ]
# Its always possible to write
# numbers > 69 to write as
# numbers ending with 7
if (n > 69):
return hasharr[n % 10]
else:
# If the number is atleast equal
# to the sum of minimum numbers
# ending with 7
if (n >= hasharr[n % 10] * 7):
return hasharr[n % 10]
else:
return -1
# Driver code
n = 38;
print(minCount(n))
# This code is contributed by spp____
C#
// C# implementation of the above approach
using System;
class GFG{
// Function to return the count of
// minimum numbers ending with 7
// required such that the sum
// of these numbers is n
static int minCount(int n)
{
// hasharr[i] will store the minimum
// numbers ending with 7 so that it
// sums to number ending with digit i
int[] hasharr = { 10, 3, 6, 9, 2,
5, 8, 1, 4, 7 };
// Its always possible to write
// numbers > 69 to write as
// numbers ending with 7
if (n > 69)
return hasharr[n % 10];
else
{
// If the number is atleast equal
// to the sum of minimum numbers
// ending with 7
if (n >= hasharr[n % 10] * 7)
return (hasharr[n % 10]);
else
return -1;
}
}
// Driver code
public static void Main (String[] args)
{
int n = 38;
Console.WriteLine(minCount(n));
}
}
// This code is contributed by spp____
输出:
4
时间复杂度: O(1)
辅助空间: O(1)