diff options
| author | 冯昶 <seaker@qq.com> | 2021-03-15 18:13:51 +0800 |
|---|---|---|
| committer | 冯昶 <seaker@qq.com> | 2021-03-15 18:13:51 +0800 |
| commit | 8b6be37fe4dac8b4c6489a95e55514b76b298d15 (patch) | |
| tree | ae36c8ec2c71f606c0e36adaa19dba366a68a0b4 /challenge-102/paulo-custodio/cpp | |
| parent | 865acfd056fb6f409ec6b1a81d60b931cbcb69fe (diff) | |
| parent | c9aec2da6bcb04b488183f09ca94bee488557aff (diff) | |
| download | perlweeklychallenge-club-8b6be37fe4dac8b4c6489a95e55514b76b298d15.tar.gz perlweeklychallenge-club-8b6be37fe4dac8b4c6489a95e55514b76b298d15.tar.bz2 perlweeklychallenge-club-8b6be37fe4dac8b4c6489a95e55514b76b298d15.zip | |
Merge branch 'master' of github.com:seaker/perlweeklychallenge-club
Diffstat (limited to 'challenge-102/paulo-custodio/cpp')
| -rw-r--r-- | challenge-102/paulo-custodio/cpp/ch-1.cpp | 68 | ||||
| -rw-r--r-- | challenge-102/paulo-custodio/cpp/ch-2.cpp | 54 |
2 files changed, 122 insertions, 0 deletions
diff --git a/challenge-102/paulo-custodio/cpp/ch-1.cpp b/challenge-102/paulo-custodio/cpp/ch-1.cpp new file mode 100644 index 0000000000..01d88ccd5a --- /dev/null +++ b/challenge-102/paulo-custodio/cpp/ch-1.cpp @@ -0,0 +1,68 @@ +/* +Challenge 102 + +TASK #1 › Rare Numbers +Submitted by: Mohammad S Anwar + +You are given a positive integer $N. + +Write a script to generate all Rare numbers of size $N if exists. Please +checkout the page for more information about it. +Examples + +(a) 2 digits: 65 +(b) 6 digits: 621770 +(c) 9 digits: 281089082 +*/ + +#include <iostream> +#include <cmath> + +int ipow(int base, int exp) { + int result = 1; + for (;;) { + if (exp & 1) + result *= base; + exp >>= 1; + if (!exp) + break; + base *= base; + } + return result; +} + +int invert_number(int r) { + int r1 = 0; + while (r != 0) { + r1 = r1 * 10 + (r % 10); + r = r / 10; + } + return r1; +} + +bool is_perfect_square(int n) { + double s = sqrt((double)n); + if (floor(s) == s) + return true; + else + return false; +} + +void print_rare(int n) { + int start = ipow(10, n - 1); + int end = ipow(10, n ); + for (int r = start; r < end; r++) { + int r1 = invert_number(r); + if (is_perfect_square(r + r1) && r >= r1 && is_perfect_square(r - r1)) + std::cout << r << std::endl; + } +} + +int main(int argc, char* argv[]) { + if (argc != 2) { + std::cerr << "Usage: ch-1 N" << std::endl; + return EXIT_FAILURE; + } + else + print_rare(atoi(argv[1])); +} diff --git a/challenge-102/paulo-custodio/cpp/ch-2.cpp b/challenge-102/paulo-custodio/cpp/ch-2.cpp new file mode 100644 index 0000000000..24fbf2fb06 --- /dev/null +++ b/challenge-102/paulo-custodio/cpp/ch-2.cpp @@ -0,0 +1,54 @@ +/* +Challenge 102 + +TASK #2 › Hash-counting String +Submitted by: Stuart Little + +You are given a positive integer $N. + +Write a script to produce Hash-counting string of that length. + +The definition of a hash-counting string is as follows: +- the string consists only of digits 0-9 and hashes, ‘#’ +- there are no two consecutive hashes: ‘##’ does not appear in your string +- the last character is a hash +- the number immediately preceding each hash (if it exists) is the position +of that hash in the string, with the position being counted up from 1 + +It can be shown that for every positive integer N there is exactly one such +length-N string. +Examples: + +(a) "#" is the counting string of length 1 +(b) "2#" is the counting string of length 2 +(c) "#3#" is the string of length 3 +(d) "#3#5#7#10#" is the string of length 10 +(e) "2#4#6#8#11#14#" is the string of length 14 +*/ + +#include <iostream> +#include <string> + +std::string hash_count(int n) { + std::string str(n, ' '); + int i = n - 1; + while (i >= 0) { + int pos = i + 1; + str[i--] = '#'; + while (i >= 0 && pos != 0) { + str[i--] = '0' + (pos % 10); + pos /= 10; + } + } + return str; +} + + +int main(int argc, char* argv[]) { + if (argc != 2) { + std::cerr << "Usage: ch-1 N" << std::endl; + return EXIT_FAILURE; + } + else + std::cout << hash_count(atoi(argv[1])) << std::endl; +} |
