Dado un número entero , genera los primeros términos de la sucesión de Aronson .
La secuencia de Aronson es una secuencia infinita de números enteros obtenidos del índice de T (o t) en la oración:
«T es la letra primera, cuarta, undécima, decimosexta… de esta oración».
- La primera aparición de T en la oración está en el índice 1 (indexación basada en 1) y el número mencionado primero es el primero , es decir, 1
- De manera similar, la segunda aparición de t en la oración está en el índice 4 y el número mencionado en segundo lugar es el cuarto , es decir, 4
- De manera similar, la tercera aparición de t en la oración está en el índice 11 y el número mencionado en tercer lugar es el undécimo , es decir, 11
- Asimismo, la serie continúa como 1, 4, 11, 16,…
Ejemplos:
Entrada: n = 3
Salida: 1, 4, 11Entrada: n = 6
Salida: 1, 4, 11, 16, 24, 29
Enfoque: una idea simple es almacenar la string «T es el» para obtener los dos primeros términos de la secuencia. Para cada uno de estos términos, conviértalo en palabras en forma ordinal y agréguelo a la string y calcule el valor de los siguientes términos superiores. Repita este proceso para cada uno de los siguientes términos superiores generados n-2 veces para generar los primeros n términos de la sucesión de Aronson.
Para convertir un número en palabras, consulte aquí .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to generate the // first n terms of Aronson's sequence #include <bits/stdc++.h> using namespace std; // Returns the given number in words string convert_to_words(string num) { // Get number of digits in given number int len = num.length(); // Base cases if (len == 0 || len > 4) { return ""; } /* The following arrays contain one digit(both cardinal and ordinal forms), two digit(<20, ordinal forms) numbers, and multiples(ordinal forms) and powers of 10. */ string single_digits_temp[] = { "", "one", "two", "three", "four" , "five", "six", "seven", "eight", "nine" }; string single_digits[] = { "", "first", "second", "third", "fourth" , "fifth", "sixth", "seventh", "eighth", "ninth" }; string two_digits[] = { "", "tenth", "eleventh", "twelfth", "thirteenth" , "fourteenth", "fifteenth", "sixteenth" , "seventeenth", "eighteenth", "nineteenth" }; string tens_multiple[] = { "", "tenth", "twentieth", "thirtieth", "fortieth" , "fiftieth", "sixtieth", "seventieth" , "eightieth", "ninetieth" }; string tens_power[] = { "hundred", "thousand" }; string word = ""; // If single digit number if (len == 1) { word += single_digits[num[0] - '0']; return word; } int i = 0, ctr = 0; string s = " "; while (i < len) { if (len >= 3) { if (num[i] != '0') { word += single_digits_temp[num[i] - '0'] + " "; // here len can be 3 or 4 word += tens_power[len - 3] + " "; ctr++; } len--; num.erase(0, 1); } // last two digits else { if (ctr != 0) { s = " and "; word.erase(word.length() - 1); } // Handle all powers of 10 if (num[i + 1] == '0') if (num[i] == '0') word = word + "th"; else word += s + tens_multiple[num[i] - '0']; // Handle two digit numbers < 20 else if (num[i] == '1') word += s + two_digits[num[i + 1] - '0' + 1]; else { if (num[i] != '0') word += s + tens_multiple[num[i] - '0'] .substr(0, tens_multiple[num[i] - '0'] .length() - 4) + "y "; else word += s; word += single_digits[num[i + 1] - '0']; } i += 2; } if (i == len) { if (word[0] == ' ') word.erase(0, 1); } } return word; } // Function to print the first n terms // of Aronson's sequence void Aronsons_sequence(int n) { string str = "T is the "; int ind = 0; for (int i = 0; i < str.length(); i++) { // check if character // is alphabet or not if (isalpha(str[i])) { ind += 1; } if (str[i] == 't' or str[i] == 'T') { n -= 1; // convert number to words // in ordinal format and append str += convert_to_words(to_string(ind)) + ", "; cout << ind << ", "; } if (n == 0) break; } } // Driver code int main(void) { int n = 6; Aronsons_sequence(n); return 0; }
Java
// Java program to generate the // first n terms of Aronson's sequence import java.util.*; class GFG { // Returns the given number in words static String convert_to_words(char[] num) { // Get number of digits in given number int len = num.length; // Base cases if (len == 0 || len > 4) { return ""; } /* The following arrays contain one digit(both cardinal and ordinal forms), two digit(<20, ordinal forms) numbers, and multiples(ordinal forms) and powers of 10. */ String single_digits_temp[] = { "", "one", "two", "three", "four" , "five", "six", "seven", "eight", "nine" }; String single_digits[] = { "", "first", "second", "third", "fourth" , "fifth", "sixth", "seventh", "eighth", "ninth" }; String two_digits[] = { "", "tenth", "eleventh", "twelfth", "thirteenth" , "fourteenth", "fifteenth", "sixteenth" , "seventeenth", "eighteenth", "nineteenth" }; String tens_multiple[] = { "", "tenth", "twentieth", "thirtieth", "fortieth" , "fiftieth", "sixtieth", "seventieth" , "eightieth", "ninetieth" }; String tens_power[] = { "hundred", "thousand" }; String word = ""; // If single digit number if (len == 1) { word += single_digits[num[0] - '0']; return word; } int i = 0, ctr = 0; String s = " "; while (i < len) { if (len >= 3) { if (num[i] != '0') { word += single_digits_temp[num[i] - '0'] + " "; // here len can be 3 or 4 word += tens_power[len - 3] + " "; ctr++; } len--; num=Arrays.copyOfRange(num, 1, num.length); } // last two digits else { if (ctr != 0) { s = " and "; word = word.substring(0,word.length() - 1); } // Handle all powers of 10 if (num[i + 1] == '0') if (num[i] == '0') word = word + "th"; else word += s + tens_multiple[num[i] - '0']; // Handle two digit numbers < 20 else if (num[i] == '1') word += s + two_digits[num[i + 1] - '0' + 1]; else { if (num[i] != '0') word += s + tens_multiple[num[i] - '0'] .substring(0, tens_multiple[num[i] - '0'] .length() - 4) + "y "; else word += s; word += single_digits[num[i + 1] - '0']; } i += 2; } if (i == len) { if (word.charAt(0) == ' ') word = word.substring(1,word.length()); } } return word; } // Function to print the first n terms // of Aronson's sequence static void Aronsons_sequence(int n) { String str = "T is the "; int ind = 0; for (int i = 0; i < str.length(); i++) { // check if character // is alphabet or not if (Character.isAlphabetic(str.charAt(i))) { ind += 1; } if (str.charAt(i) == 't' || str.charAt(i) == 'T') { n -= 1; // convert number to words // in ordinal format and append str += convert_to_words(String.valueOf(ind).toCharArray()) + ", "; System.out.print(ind+ ", "); } if (n == 0) break; } } // Driver code public static void main(String[] args) { int n = 6; Aronsons_sequence(n); } } // This code is contributed by 29AjayKumar
C#
// C# program to generate the // first n terms of Aronson's sequence using System; class GFG { // Returns the given number in words static String convert_to_words(char[] num) { // Get number of digits in given number int len = num.Length; // Base cases if (len == 0 || len > 4) { return ""; } /* The following arrays contain one digit(both cardinal and ordinal forms), two digit(<20, ordinal forms) numbers, and multiples(ordinal forms) and powers of 10. */ String []single_digits_temp = { "", "one", "two", "three", "four" , "five", "six", "seven", "eight", "nine" }; String []single_digits = { "", "first", "second", "third", "fourth" , "fifth", "sixth", "seventh", "eighth", "ninth" }; String []two_digits = { "", "tenth", "eleventh", "twelfth", "thirteenth" , "fourteenth", "fifteenth", "sixteenth" , "seventeenth", "eighteenth", "nineteenth" }; String []tens_multiple = { "", "tenth", "twentieth", "thirtieth", "fortieth" , "fiftieth", "sixtieth", "seventieth" , "eightieth", "ninetieth" }; String []tens_power = { "hundred", "thousand" }; String word = ""; // If single digit number if (len == 1) { word += single_digits[num[0] - '0']; return word; } int i = 0, ctr = 0; String s = " "; while (i < len) { if (len >= 3) { if (num[i] != '0') { word += single_digits_temp[num[i] - '0'] + " "; // here len can be 3 or 4 word += tens_power[len - 3] + " "; ctr++; } len--; Array.Copy(num, 1, num, 0, num.Length - 1); } // last two digits else { if (ctr != 0) { s = " and "; word = word.Substring(0,word.Length - 1); } // Handle all powers of 10 if (num[i + 1] == '0') if (num[i] == '0') word = word + "th"; else word += s + tens_multiple[num[i] - '0']; // Handle two digit numbers < 20 else if (num[i] == '1') word += s + two_digits[num[i + 1] - '0' + 1]; else { if (num[i] != '0') word += s + tens_multiple[num[i] - '0'] .Substring(0, tens_multiple[num[i] - '0'] .Length - 4) + "y "; else word += s; word += single_digits[num[i + 1] - '0']; } i += 2; } if (i == len) { if (word[0] == ' ') word = word.Substring(1,word.Length - 1); } } return word; } // Function to print the first n terms // of Aronson's sequence static void Aronsons_sequence(int n) { String str = "T is the "; int ind = 0; for (int i = 0; i < str.Length; i++) { // check if character // is alphabet or not if (char.IsLetterOrDigit(str[i])) { ind += 1; } if (str[i] == 't' || str[i] == 'T') { n -= 1; // convert number to words // in ordinal format and append str += convert_to_words(String.Join("",ind).ToCharArray()) + ", "; Console.Write(ind + ", "); } if (n == 0) break; } } // Driver code public static void Main(String[] args) { int n = 6; Aronsons_sequence(n); } } // This code is contributed by 29AjayKumar
Javascript
<script> // Javascript program to generate the // first n terms of Aronson's sequence // Returns the given number in words function convert_to_words(num) { // Get number of digits in given number let len = num.length; // Base cases if (len == 0 || len > 4) { return ""; } /* The following arrays contain one digit(both cardinal and ordinal forms), two digit(<20, ordinal forms) numbers, and multiples(ordinal forms) and powers of 10. */ let single_digits_temp = [ "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" ]; let single_digits = [ "", "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth" ]; let two_digits = [ "", "tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth", "sixteenth", "seventeenth", "eighteenth", "nineteenth" ]; let tens_multiple = [ "", "tenth", "twentieth", "thirtieth", "fortieth", "fiftieth", "sixtieth", "seventieth", "eightieth", "ninetieth" ]; let tens_power = [ "hundred", "thousand" ]; let word = ""; // If single digit number if (len == 1) { word += single_digits[num[0].charCodeAt(0) - '0'.charCodeAt(0)]; return word; } let i = 0, ctr = 0; let s = " "; while (i < len) { if (len >= 3) { if (num[i] != '0') { word += single_digits_temp[ num[i].charCodeAt(0) - '0'.charCodeAt(0)] + " "; // Here len can be 3 or 4 word += tens_power[len - 3] + " "; ctr++; } len--; num=num.slice(1, num.length); } // Last two digits else { if (ctr != 0) { s = " and "; word = word.substring(0,word.length - 1); } // Handle all powers of 10 if (num[i + 1] == '0') if (num[i] == '0') word = word + "th"; else word += s + tens_multiple[ num[i].charCodeAt(0) - '0'.charCodeAt(0)]; // Handle two digit numbers < 20 else if (num[i] == '1') word += s + two_digits[ num[i + 1].charCodeAt(0) - '0'.charCodeAt(0) + 1]; else { if (num[i] != '0') word += s + tens_multiple[ num[i].charCodeAt(0) - '0'.charCodeAt(0)].substring( 0, tens_multiple[ num[i].charCodeAt(0) - '0'.charCodeAt(0)].length - 4) + "y "; else word += s; word += single_digits[ num[i + 1].charCodeAt(0) - '0'.charCodeAt(0)]; } i += 2; } if (i == len) { if (word.charAt(0) == ' ') word = word.substring(1,word.length); } } return word; } // Function to print the first n terms // of Aronson's sequence function Aronsons_sequence(n) { let str = "T is the "; let ind = 0; for(let i = 0; i < str.length; i++) { // Check if character // is alphabet or not if (str[i].toLowerCase() != str[i].toUpperCase()) { ind += 1; } if (str[i] == 't' || str[i] == 'T') { n -= 1; // Convert number to words // in ordinal format and append str += convert_to_words( (ind).toString().split("")) + ", "; document.write(ind + ", "); } if (n == 0) break; } } // Driver code let n = 6; Aronsons_sequence(n); // This code is contributed by rag2127 </script>
1, 4, 11, 16, 24, 29,
Publicación traducida automáticamente
Artículo escrito por SouravAChowdhury_97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA