给定N为数字位数,任务是查找所有长度等于N的自传编号。
An autobiographical number is a number such that the first digit of it counts how many zeroes are there in it, the second digit counts how many ones are there and so on.
For example, 1210 has 1 zero, 2 ones, 1 two and 0 threes.
例子:
Input: N = 4
Output: 1210, 2020
Input: N = 5
Output: 21200
方法:具有N位数字的任何数字都在[10 (n-1) ,10 n -1]范围内。因此,将迭代并检查此范围内的每个数字是否是自传数字。
- 将数字转换为字符串
- 遍历每个数字并将其存储在变量中。
- 然后运行一个内循环,将外循环的迭代器与内循环的每个数字进行比较,如果它们相等,则增加该数字的出现次数。
- 然后检查出现次数和存储每个数字的变量之间的相等性,以便我们可以知道当前数字是否是自传的。
下面是上述方法的实现:
C++
// C++ implementation to find
// Autobiographical numbers with length N
#include
using namespace std;
// Function to return if the
// number is autobiographical or not
bool isAutoBio(int num)
{
string autoStr;
int index, number, i, j, cnt;
// Converting the integer
// number to string
autoStr = to_string(num);
for (int i = 0;
i < autoStr.size();
i++) {
// Extracting each character
// from each index one by one
// and converting into an integer
index = autoStr.at(i) - '0';
// Initialise count as 0
cnt = 0;
for (j = 0; j < autoStr.size(); j++) {
number = autoStr.at(j) - '0';
// Check if it is equal to the
// index i if true then
// increment the count
if (number == i)
// It is an
// Autobiographical
// number
cnt++;
}
// Return false if the count and
// the index number are not equal
if (index != cnt)
return false;
}
return true;
}
// Function to print autobiographical number
// with given number of digits
void findAutoBios(int n)
{
int high, low, i, flag = 0;
// Left boundary of interval
low = pow(10, n - 1);
// Right boundary of interval
high = pow(10, n) - 1;
for (i = low; i <= high; i++) {
if (isAutoBio(i)) {
flag = 1;
cout << i << ", ";
}
}
// Flag = 0 implies that the number
// is not an autobiographical no.
if (!flag)
cout << "There is no "
<< "Autobiographical number"
<< " with " << n
<< " digits\n";
}
// Driver Code
int main()
{
int N = 0;
findAutoBios(N);
N = 4;
findAutoBios(N);
return 0;
}
Java
// Java implementation to find
// Autobiographical numbers with length N
import java.util.*;
import java.lang.Math;
public class autobio {
public static boolean isAutoBio(int num)
{
String autoStr;
int index, number, i, j, cnt;
// Converting the integer
// number to string
autoStr = Integer.toString(num);
for (i = 0; i < autoStr.length(); i++) {
// Extracting each character
// from each index one by one
// and converting into an integer
index = Integer.parseInt(autoStr.charAt(i) + "");
// initialize count as 0
cnt = 0;
for (j = 0; j < autoStr.length(); j++) {
number = Integer.parseInt(autoStr.charAt(j) + "");
// Check if it is equal to the
// index i if true then
// increment the count
if (number == i)
// It is an
// Autobiographical
// number
cnt++;
}
// Return false if the count and
// the index number are not equal
if (cnt != index)
return false;
}
return true;
}
// Function to print autobiographical number
// with given number of digits
public static void findAutoBios(double n)
{
// both the boundaries are taken double, so as
// to satisfy Math.pow() function's signature
double high, low;
int i, flag = 0;
// Left boundary of interval
low = Math.pow(10.0, n - 1);
// Right boundary of interval
high = Math.pow(10.0, n) - 1.0;
for (i = (int)low; i <= (int)high; i++)
if (isAutoBio(i)) {
flag = 1;
System.out.print(i + ", ");
}
// Flag = 0 implies that the number
// is not an autobiographical no.
if (flag == 0)
System.out.println("There is no Autobiographical Number"
+ "with " + (int)n + " digits");
}
// Driver Code
public static void main(String[] args)
{
double N = 0;
findAutoBios(N);
N = 4;
findAutoBios(N);
}
}
Python3
# Python implementation to find
# Autobiographical numbers with length N
from math import pow
# Function to return if the
# number is autobiographical or not
def isAutoBio(num):
# Converting the integer
# number to string
autoStr = str(num)
for i in range(0, len(autoStr)):
# Extracting each character
# from each index one by one
# and converting into an integer
index = int(autoStr[i])
# Initialize count as 0
cnt = 0
for j in range(0, len(autoStr)):
number = int(autoStr[j])
# Check if it is equal to the
# index i if true then
# increment the count
if number == i:
# It is an
# Autobiographical
# number
cnt += 1
# Return false if the count and
# the index number are not equal
if cnt != index:
return False
return True
# Function to print autobiographical number
# with given number of digits
def findAutoBios(n):
# Left boundary of interval
low = int(pow(10, n-1))
# Right boundary of interval
high = int(pow(10, n) - 1)
flag = 0
for i in range(low, high + 1):
if isAutoBio(i):
flag = 1
print(i, end =', ')
# Flag = 0 implies that the number
# is not an autobiographical no.
if flag == 0:
print("There is no Autobiographical Number with "+ str(n) + " digits")
# Driver Code
if __name__ == "__main__":
N = 0
findAutoBios(N)
N = 4
findAutoBios(N)
C#
// C# implementation to find
// Autobiographical numbers with length N
using System;
class autobio {
public static bool isAutoBio(int num)
{
String autoStr;
int index, number, i, j, cnt;
// Converting the integer
// number to string
autoStr = num.ToString();
for (i = 0; i < autoStr.Length; i++) {
// Extracting each character
// from each index one by one
// and converting into an integer
index = Int32.Parse(autoStr[i] + "");
// initialize count as 0
cnt = 0;
for (j = 0; j < autoStr.Length; j++) {
number = Int32.Parse(autoStr[j] + "");
// Check if it is equal to the
// index i if true then
// increment the count
if (number == i)
// It is an
// Autobiographical
// number
cnt++;
}
// Return false if the count and
// the index number are not equal
if (cnt != index)
return false;
}
return true;
}
// Function to print autobiographical number
// with given number of digits
public static void findAutoBios(double n)
{
// both the boundaries are taken double, so as
// to satisfy Math.Pow() function's signature
double high, low;
int i, flag = 0;
// Left boundary of interval
low = Math.Pow(10.0, n - 1);
// Right boundary of interval
high = Math.Pow(10.0, n) - 1.0;
for (i = (int)low; i <= (int)high; i++)
if (isAutoBio(i)) {
flag = 1;
Console.Write(i + ", ");
}
// Flag = 0 implies that the number
// is not an autobiographical no.
if (flag == 0)
Console.WriteLine("There is no Autobiographical Number"
+ "with " + (int)n + " digits");
}
// Driver Code
public static void Main(String[] args)
{
double N = 0;
findAutoBios(N);
N = 4;
findAutoBios(N);
}
}
// This code is contributed by sapnasingh4991
输出:
There is no Autobiographical number with 0 digits
1210, 2020