#include <iostream> #include <string> #include <algorithm> #include <map> class NOS { public: NOS(const char* s="") : s(s) {} int value()const; const std::string& str()const { return s; } NOS& operator++(); void expandAndReset(); bool atMax()const; bool operator<(const NOS& rhs)const; private: int zeroCount()const; private: std::string s; }; int main() { int n = 500; std::map<int,NOS> results; NOS work = "0"; while (results.size() != n || !work.atMax()) { int val = work.value(); if (val >= 1 && val <= n) { auto it = results.find(val); if (it == results.end() || work < it->second) results[val] = work; } if (work.atMax()) work.expandAndReset(); else ++work; } for (auto& p : results) std::cout << p.first << " => " << p.second.str() << "\n"; } bool NOS::operator<(const NOS& rhs)const { if (s.size() != rhs.s.size()) return s.size() < rhs.s.size(); int zeroDiff = zeroCount() - rhs.zeroCount(); return zeroDiff ? zeroDiff > 0 : s < rhs.s; } int NOS::zeroCount()const { return std::count_if(s.begin(), s.end(), [](char c){ return c=='0'; }); } bool NOS::atMax()const { return std::all_of(s.begin(), s.end(), [](char c){ return c=='2'; }); } void NOS::expandAndReset() { s = std::string(s.size()+1, '0'); } NOS& NOS::operator++() { int i = s.size() - 1; while (i >= 0) if (++s[i] > '2') s[i--] = '0'; else break; return *this; } int NOS::value()const { int result = 0, operand = 1; for (char c : s) switch (c) { case '0': result += operand++; break; case '1': result -= operand++; break; case '2': result *= operand++; break; default: break; } return result; }
Standard input is empty
1 => 0 2 => 02 3 => 00 4 => 100 5 => 020 6 => 000 7 => 1020 8 => 1000 9 => 002 10 => 0000 11 => 01000 12 => 1022 13 => 0020 14 => 02000 15 => 00000 16 => 1002 17 => 10220 18 => 00200 19 => 00021 20 => 0202 21 => 10020 22 => 0010000 23 => 000201 24 => 0002 25 => 02020 26 => 001020 27 => 100200 28 => 0000000 29 => 00020 30 => 01002 31 => 00221 32 => 0002100 33 => 0010200 34 => 100021 35 => 10202 36 => 0022 37 => 002210 38 => 0202000 39 => 020021 40 => 10002 41 => 00220 42 => 000102 43 => 0100200 44 => 000021 45 => 02002 46 => 100020 47 => 002200 48 => 002012 49 => 0000201 50 => 00002 51 => 020020 52 => 0020211 53 => 1000200 54 => 001002 55 => 0020120 56 => 000020 57 => 00002010 58 => 0200200 59 => 002021 60 => 10222 61 => 0010020 62 => 00220000 63 => 0000200 64 => 0020201 65 => 00202 66 => 010002 67 => 0001220 68 => 000021000 69 => 00100200 70 => 0200102 71 => 002020 72 => 102002 73 => 0100020 74 => 100221 75 => 00000211 76 => 00200121 77 => 0000102 78 => 100002 79 => 1020020 80 => 10022 81 => 1002210 82 => 000002101 83 => 0000021 84 => 020002 85 => 1000020 86 => 100220 87 => 0202211 88 => 00012102 89 => 00000201 90 => 000002 91 => 0001002 92 => 00200120 93 => 1002200 94 => 020221 95 => 1022021 96 => 00101002 97 => 0000020 98 => 0020102 99 => 0202201 100 => 02022 101 => 0020021 102 => 102202 103 => 10220210 104 => 02000012 105 => 0010002 106 => 020220 107 => 0002121 108 => 002002 109 => 1022020 110 => 100220000 111 => 01000021 112 => 0001202 113 => 0202200 114 => 000212 115 => 0020020 116 => 002002010 117 => 10220200 118 => 10200021 119 => 0100002 120 => 00022 121 => 0002120 122 => 001000200 123 => 00200200 124 => 000212100 125 => 00022001 126 => 000220 127 => 0010220 128 => 00000102 129 => 00021200 130 => 000000211 131 => 0000001200 132 => 02000021 133 => 0002200 134 => 10200020 135 => 00102200 136 => 00200012 137 => 000001020 138 => 000212000 139 => 00000021 140 => 0200002 141 => 00022000 142 => 020202101 143 => 0202021 144 => 00001002 145 => 002000120 146 => 000000201 147 => 0000002 148 => 02000020 149 => 02020201 150 => 020202 151 => 02020210 152 => 00200102 153 => 00020121 154 => 0000002001 155 => 00000020 156 => 020202001 157 => 0202020 158 => 020202010 159 => 00020211 160 => 00010002 161 => 0002012 162 => 000110002 163 => 0000100200 164 => 000000200 165 => 02020200 166 => 000202101 167 => 0002021 168 => 0020002 169 => 00020120 170 => 010022011 171 => 00222011 172 => 010022101 173 => 0100221 174 => 000202 175 => 0002102 176 => 00100002 177 => 002010020 178 => 000201200 179 => 0022201 180 => 00222 181 => 0002020 182 => 0010202 183 => 00021020 184 => 00012002 185 => 00222001 186 => 002220 187 => 0100220 188 => 010022010 189 => 1002002 190 => 00102020 191 => 102000021 192 => 01000002 193 => 0022200 194 => 002220010 195 => 01002200 196 => 002220100 197 => 10020020 198 => 000000102 199 => 001020200 200 => 10200002 201 => 00222000 202 => 00001221 203 => 1020212 204 => 010022000 205 => 0000000211 206 => 100200200 207 => 002000012 208 => 10000002 209 => 02020021 210 => 102022 211 => 10202120 212 => 1020212010 213 => 0100201211 214 => 0100220000 215 => 000000021 216 => 02000002 217 => 0202002 218 => 00001220 219 => 1020000200 220 => 102021200 221 => 100021211 222 => 002202111 223 => 010020121 224 => 00000002 225 => 02020020 226 => 0000010020 227 => 000012200 228 => 000200211 229 => 0020000211 230 => 10002121 231 => 00220211 232 => 01002012 233 => 1000221 234 => 000010002 235 => 010020211 236 => 002202011 237 => 00020021 238 => 1000212 239 => 0022021 240 => 100022 241 => 10002210 242 => 002210211 243 => 002001002 244 => 01002021 245 => 0002002 246 => 002202 247 => 1000220 248 => 00200002 249 => 000201020 250 => 100022100 251 => 00221021 252 => 0100202 253 => 0022020 254 => 002202010 255 => 10002200 256 => 00021002 257 => 002000020 258 => 002210201 259 => 0022102 260 => 01002020 261 => 00220200 262 => 000200200 263 => 0200221 264 => 00102002 265 => 02002121 266 => 0022021000 267 => 00221020 268 => 0022102010 269 => 02002201 270 => 020022 271 => 02002210 272 => 10020002 273 => 0200212 274 => 020021210 275 => 0002100200 276 => 002210200 277 => 0200220 278 => 020022010 279 => 10202021 280 => 00010212 281 => 02002120 282 => 0000221011 283 => 0010200200 284 => 0200220001 285 => 02002200 286 => 00010221 287 => 1020202 288 => 10202102 289 => 000102120 290 => 000022011 291 => 000021211 292 => 000022101 293 => 0000221 294 => 0001022 295 => 10202020 296 => 00001202 297 => 102000002 298 => 0100000020 299 => 00002201 300 => 000022 301 => 00002210 302 => 00010220 303 => 100020121 304 => 02020002 305 => 000012020 306 => 100000002 307 => 0000220 308 => 0000212 309 => 000021210 310 => 000022100 311 => 000102200 312 => 10002012 313 => 020200020 314 => 10002021 315 => 00002200 316 => 00002120 317 => 0000212010 318 => 0000220100 319 => 100021021 320 => 00220012 321 => 00220021 322 => 1000202 323 => 100020210 324 => 000000002 325 => 000021200 326 => 1022221111 327 => 000200021 328 => 10002102 329 => 0022002 330 => 10002020 331 => 1000201200 332 => 0002010021 333 => 010020102 334 => 0000000020 335 => 010020021 336 => 0020122 337 => 00220020 338 => 0022002010 339 => 100020200 340 => 020020211 341 => 0020000021 342 => 000201002 343 => 002210021 344 => 01002002 345 => 10222211 346 => 002200200 347 => 1000210200 348 => 0200202101 349 => 02002021 350 => 102222011 351 => 002000002 352 => 00221002 353 => 1022221 354 => 102222110 355 => 0002000200 356 => 020020201 357 => 0200202 358 => 020020210 359 => 10222201 360 => 102222 361 => 10222210 362 => 1022221010 363 => 0100200200 364 => 0200202001 365 => 02002020 366 => 002022111 367 => 1022220 368 => 02002102 369 => 001020002 370 => 00100221 371 => 0022100200 372 => 0020221011 373 => 0000201211 374 => 020020200 375 => 00202211 376 => 00100212 377 => 001002201 378 => 0010022 379 => 001002210 380 => 002022011 381 => 0000202011 382 => 002022101 383 => 0020221 384 => 00002021 385 => 001002120 386 => 00100220 387 => 000021012 388 => 1002000020 389 => 00202201 390 => 002022 391 => 00202210 392 => 0000202 393 => 000020210 394 => 0020221100 395 => 001002200 396 => 002022001 397 => 0020220 398 => 002022010 399 => 000021021 400 => 00002020 401 => 000020120 402 => 0020212011 403 => 000122211 404 => 0020220001 405 => 00202200 406 => 0020220010 407 => 002021121 408 => 00002102 409 => 000020200 410 => 0100000002 411 => 0000201200 412 => 00012221 413 => 0020212 414 => 002022000 415 => 100020021 416 => 00202112 417 => 000021020 418 => 00200000012 419 => 000122201 420 => 0001222 421 => 00202120 422 => 0000110221 423 => 002200021 424 => 10002002 425 => 002021120 426 => 00001200200 427 => 0000210200 428 => 00012220 429 => 0001222010 430 => 002021200 431 => 002012021 432 => 00220002 433 => 100020020 434 => 10002002010 435 => 0020211200 436 => 10002002100 437 => 000122200 438 => 00002102000 439 => 020001221 440 => 00201202 441 => 002200020 442 => 0000110220 443 => 1000200200 444 => 00220002100 445 => 010002211 446 => 1002221111 447 => 0001222000 448 => 02000122 449 => 002012020 450 => 000200002 451 => 0022000200 452 => 00201202100 453 => 0100022101 454 => 01000221 455 => 020020021 456 => 100222111 457 => 020001220 458 => 0022100021 459 => 010020002 460 => 0002000020 461 => 010002201 462 => 0100022 463 => 010002210 464 => 02002002 465 => 10022211 466 => 1002221110 467 => 0200012200 468 => 002210002 469 => 0100200020 470 => 01000220 471 => 0100022010 472 => 01000212 473 => 1002221 474 => 100222110 475 => 00202020111 476 => 0200210021 477 => 001002012 478 => 0022100020 479 => 10022201 480 => 100222 481 => 10022210 482 => 1002221010 483 => 0200200200 484 => 1002221100 485 => 0000200121 486 => 020021002 487 => 1002220 488 => 00100202 489 => 00202021 490 => 100222100 491 => 0100021200 492 => 00002002011 493 => 0020201211 494 => 1002220001 495 => 10022200 496 => 10200221 497 => 0020202 498 => 002020210 499 => 10020000021 500 => 0010200002