Strange numbers: Difference between revisions
Content added Content deleted
(add FreeBASIC) |
|||
Line 366: | Line 366: | ||
Strange numbers 100-500: 87 |
Strange numbers 100-500: 87 |
||
</pre> |
</pre> |
||
=={{header|C++}}== |
|||
{{trans|Java}} |
|||
<lang cpp>#include <algorithm> |
|||
#include <iostream> |
|||
#include <vector> |
|||
std::vector<int> digits(int n) { |
|||
std::vector<int> result; |
|||
while (n > 0) { |
|||
auto rem = n % 10; |
|||
result.push_back(rem); |
|||
n /= 10; |
|||
} |
|||
std::reverse(result.begin(), result.end()); |
|||
return result; |
|||
} |
|||
bool is_strange(int n) { |
|||
auto test = [](int a, int b) { |
|||
auto v = std::abs(a - b); |
|||
return v == 2 || v == 3 || v == 5 || v == 7; |
|||
}; |
|||
auto xs = digits(n); |
|||
for (size_t i = 1; i < xs.size(); i++) { |
|||
if (!test(xs[i - 1], xs[i])) { |
|||
return false; |
|||
} |
|||
} |
|||
return true; |
|||
} |
|||
int main() { |
|||
std::vector<int> xs; |
|||
for (int i = 100; i <= 500; i++) { |
|||
if (is_strange(i)) { |
|||
xs.push_back(i); |
|||
} |
|||
} |
|||
std::cout << "Strange numbers in range [100..500]\n"; |
|||
std::cout << "(Total: " << xs.size() << ")\n\n"; |
|||
for (size_t i = 0; i < xs.size(); i++) { |
|||
std::cout << xs[i]; |
|||
if ((i + 1) % 10 == 0) { |
|||
std::cout << '\n'; |
|||
} else { |
|||
std::cout << ' '; |
|||
} |
|||
} |
|||
return 0; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>Strange numbers in range [100..500] |
|||
(Total: 87) |
|||
130 131 135 136 138 141 142 146 147 149 |
|||
161 163 164 168 169 181 183 185 186 202 |
|||
203 205 207 241 242 246 247 249 250 252 |
|||
253 257 258 270 272 274 275 279 292 294 |
|||
296 297 302 303 305 307 313 314 316 318 |
|||
350 352 353 357 358 361 363 364 368 369 |
|||
381 383 385 386 413 414 416 418 420 424 |
|||
425 427 429 461 463 464 468 469 470 472 |
|||
474 475 479 492 494 496 497</pre> |
|||
=={{header|F_Sharp|F#}}== |
=={{header|F_Sharp|F#}}== |