aboutsummaryrefslogtreecommitdiff
path: root/challenge-102/paulo-custodio/cpp
diff options
context:
space:
mode:
author冯昶 <seaker@qq.com>2021-03-15 18:13:51 +0800
committer冯昶 <seaker@qq.com>2021-03-15 18:13:51 +0800
commit8b6be37fe4dac8b4c6489a95e55514b76b298d15 (patch)
treeae36c8ec2c71f606c0e36adaa19dba366a68a0b4 /challenge-102/paulo-custodio/cpp
parent865acfd056fb6f409ec6b1a81d60b931cbcb69fe (diff)
parentc9aec2da6bcb04b488183f09ca94bee488557aff (diff)
downloadperlweeklychallenge-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.cpp68
-rw-r--r--challenge-102/paulo-custodio/cpp/ch-2.cpp54
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;
+}