# 算法题：找到第n个数字，其数字仅包含为0、1、2、3、4或5

## 本文概述

``````Input: n = 6
Output: 5

Input:  n = 10
Output: 13``````

1 * 10 + 0 = 10

1 * 10 + 1 = 11

1 * 10 + 2 = 12

1 * 10 + 3 = 13

1 * 10 + 4 = 14

1 * 10 + 5 = 15

2 * 10 + 0 = 20

2 * 10 + 1 = 21

2 * 10 + 2 = 22

2 * 10 + 3 = 23

2 * 10 + 4 = 24

2 * 10 + 5 = 25

``````1) push 0 to 5 in ans vector
2) for i=0 to n
for j=0 to 6

// this will be the case when first
// digit will be zero
if (ans[i]*10! = 0)
ans.push_back(ans[i]*10 + ans[j])

3) print ans[n-1]``````

## CPP

``````// C++ program to find n-th number with digits
// in {0, 1, 2, 3, 4, 5}
#include <bits/stdc++.h>
using namespace std;

// Returns the N-th number with given digits
int findNth( int n)
{
// vector to store results
vector< int > ans;

// push first 6 numbers in the answer
for ( int i = 0; i < 6; i++)
ans.push_back(i);

// calculate further results
for ( int i = 0; i <= n; i++)
for ( int j = 0; j < 6; j++)
if ((ans[i] * 10) != 0)
ans.push_back(ans[i] * 10 + ans[j]);

return ans[n - 1];
}

// Driver code
int main()
{
int n = 10;
cout << findNth(n);
return 0;
}``````

1.首先将数字n转换为6。

2.将转换后的值同时存储在数组中。

3.以相反的顺序打印该阵列。

## C ++

``````// CPP code to find nth number
// with digits 0, 1, 2, 3, 4, 5
#include <bits/stdc++.h>
using namespace std;

#define max 100000

// function to convert num to base 6
int baseconversion( int arr[], int num, int base)

{
int i = 0, rem, j;

if (num == 0) {
return 0;
}

while (num > 0) {
rem = num % base;

arr[i++] = rem;

num /= base;
}

return i;
}

// Driver code
int main()
{

// initialize an array to 0
int arr[max] = { 0 };

int n = 10;

// function calling to convert
// number n to base 6
int size = baseconversion(arr, n - 1, 6);

// if size is zero then return zero
if (size == 0)

cout << size;

for ( int i = size - 1; i >= 0; i--) {

cout << arr[i];
}

return 0;
}

// Code is contributed by Anivesh Tiwari.``````

## Java

``````// Java code to find nth number
// with digits 0, 1, 2, 3, 4, 5
class GFG {

static final int max = 100000 ;

// function to convert num to base 6
static int baseconversion( int arr[], int num, int base)
{
int i = 0 , rem, j;

if (num == 0 ) {
return 0 ;
}

while (num > 0 ) {

rem = num % base;
arr[i++] = rem;
num /= base;
}

return i;
}

// Driver code
public static void main (String[] args)
{

// initialize an array to 0
int arr[] = new int [max];

int n = 10 ;

// function calling to convert
// number n to base 6
int size = baseconversion(arr, n - 1 , 6 );

// if size is zero then return zero
if (size == 0 )
System.out.print(size);

for ( int i = size - 1 ; i >= 0 ; i--) {
System.out.print(arr[i]);
}
}
}

// This code is contributed by Anant Agarwal.``````

## C#

``````// C# code to find nth number
// with digits 0, 1, 2, 3, 4, 5
using System;

class GFG {

static int max = 100000;

// function to convert num to base 6
static int baseconversion( int []arr, int num, int bas)
{
int i = 0, rem;

if (num == 0) {
return 0;
}

while (num > 0) {

rem = num % bas;
arr[i++] = rem;
num /= bas;
}

return i;
}

// Driver code
public static void Main ()
{
// initialize an array to 0
int []arr = new int [max];

int n = 10;

// function calling to convert
// number n to base 6
int size = baseconversion(arr, n - 1, 6);

// if size is zero then return zero
if (size == 0)
Console.Write(size);

for ( int i = size - 1; i >= 0; i--) {
Console.Write(arr[i]);
}
}
}

// This code is contributed by nitin mittal``````

``13``

1.将数字N减1。

2.将数字N转换为以6为底的数字。

## C ++

``````// CPP code to find nth number
// with digits 0, 1, 2, 3, 4, 5

#include <iostream>
using namespace std;

int ans( int n){
// If the Number is less than 6 return the number as it is.
if (n < 6){
return n;
}
//Call the function again and again the get the desired result.
//And convert the number to base 6.
return n%6 + 10*(ans(n/6));
}

int getSpecialNumber( int N)
{
//Decrease the Number by 1 and Call ans function
// to convert N to base 6
return ans(--N);
}

/*Example:-
Input: N = 17
Output: 24

Explaination:-
decrease 17 by 1
N = 16
call ans() on 16

ans():
16%6 + 10*(ans(16/6))
since 16/6 = 2 it is less than 6 the ans returns value as it is.
4 + 10*(2)
= 24

int main()
{
int N = 17;
return 0;
}
// This Code is contributed by Regis Caelum``````

``24``

• 回顶