Генерация чисел с заданной суммой цифр - C (СИ)
Формулировка задачи:
Доброго времени суток...
есть следующее задание :" Составить программу, которая выдает все числа из диапазона [0, 999], сумма цифр которых равна вводимому числу N (0<N<27)".
программку написал, даже модифицировал, чтобы самому определять диапазон, но увы, результат выдается с числами , которые не входят в него..например если выставить диапазон 900, будут выдаваться помимо правильных значений, значения 901,902,,,,,999
Помогите решить проблеммку
Вот код
#include <stdio.h> #include <conio.h> main () { int a0,a1,a2,n,k; int usl; printf("vvedite max zna4enie diapazona : "); scanf("%d",&k); if(k>999) printf("error!!! 999 max 4islo"); else printf("\n vvedite 4islo ot 0 do %d : ",k); usl=scanf("%d",&n); if (usl!=1 || n>27 ||n<0){printf("error");} else printf("\n spisok 4isel, symma cifr kotorix ravna %d :\n", n); for(a0=0; a0<10; a0++) for(a1=0; a1<10; a1++) for(a2=0; a2<10; a2++) if(a0+a1+a2==n ) printf("%4d ",100*a0+10*a1+a2); getch(); return 0; }
Решение задачи: «Генерация чисел с заданной суммой цифр»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> /************************************************/ typedef struct { int count; int *list; } num_list_t; /************************************************/ int sum2num_00[]= { 0 }; int sum2num_01[]= { 1, 10, 100 }; int sum2num_02[]= { 2, 11, 20, 101, 110, 200 }; int sum2num_03[]= { 3, 12, 21, 30, 102, 111, 120, 201, 210, 300 }; int sum2num_04[]= { 4, 13, 22, 31, 40, 103, 112, 121, 130, 202, 211, 220, 301, 310, 400 }; int sum2num_05[]= { 5, 14, 23, 32, 41, 50, 104, 113, 122, 131, 140, 203, 212, 221, 230, 302, 311, 320, 401, 410, 500 }; int sum2num_06[]= { 6, 15, 24, 33, 42, 51, 60, 105, 114, 123, 132, 141, 150, 204, 213, 222, 231, 240, 303, 312, 321, 330, 402, 411, 420, 501, 510, 600 }; int sum2num_07[]= { 7, 16, 25, 34, 43, 52, 61, 70, 106, 115, 124, 133, 142, 151, 160, 205, 214, 223, 232, 241, 250, 304, 313, 322, 331, 340, 403, 412, 421, 430, 502, 511, 520, 601, 610, 700 }; int sum2num_08[]= { 8, 17, 26, 35, 44, 53, 62, 71, 80, 107, 116, 125, 134, 143, 152, 161, 170, 206, 215, 224, 233, 242, 251, 260, 305, 314, 323, 332, 341, 350, 404, 413, 422, 431, 440, 503, 512, 521, 530, 602, 611, 620, 701, 710, 800 }; int sum2num_09[]= { 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 108, 117, 126, 135, 144, 153, 162, 171, 180, 207, 216, 225, 234, 243, 252, 261, 270, 306, 315, 324, 333, 342, 351, 360, 405, 414, 423, 432, 441, 450, 504, 513, 522, 531, 540, 603, 612, 621, 630, 702, 711, 720, 801, 810, 900 }; int sum2num_10[]= { 19, 28, 37, 46, 55, 64, 73, 82, 91, 109, 118, 127, 136, 145, 154, 163, 172, 181, 190, 208, 217, 226, 235, 244, 253, 262, 271, 280, 307, 316, 325, 334, 343, 352, 361, 370, 406, 415, 424, 433, 442, 451, 460, 505, 514, 523, 532, 541, 550, 604, 613, 622, 631, 640, 703, 712, 721, 730, 802, 811, 820, 901, 910 }; int sum2num_11[]= { 29, 38, 47, 56, 65, 74, 83, 92, 119, 128, 137, 146, 155, 164, 173, 182, 191, 209, 218, 227, 236, 245, 254, 263, 272, 281, 290, 308, 317, 326, 335, 344, 353, 362, 371, 380, 407, 416, 425, 434, 443, 452, 461, 470, 506, 515, 524, 533, 542, 551, 560, 605, 614, 623, 632, 641, 650, 704, 713, 722, 731, 740, 803, 812, 821, 830, 902, 911, 920 }; int sum2num_12[]= { 39, 48, 57, 66, 75, 84, 93, 129, 138, 147, 156, 165, 174, 183, 192, 219, 228, 237, 246, 255, 264, 273, 282, 291, 309, 318, 327, 336, 345, 354, 363, 372, 381, 390, 408, 417, 426, 435, 444, 453, 462, 471, 480, 507, 516, 525, 534, 543, 552, 561, 570, 606, 615, 624, 633, 642, 651, 660, 705, 714, 723, 732, 741, 750, 804, 813, 822, 831, 840, 903, 912, 921, 930 }; int sum2num_13[]= { 49, 58, 67, 76, 85, 94, 139, 148, 157, 166, 175, 184, 193, 229, 238, 247, 256, 265, 274, 283, 292, 319, 328, 337, 346, 355, 364, 373, 382, 391, 409, 418, 427, 436, 445, 454, 463, 472, 481, 490, 508, 517, 526, 535, 544, 553, 562, 571, 580, 607, 616, 625, 634, 643, 652, 661, 670, 706, 715, 724, 733, 742, 751, 760, 805, 814, 823, 832, 841, 850, 904, 913, 922, 931, 940 }; int sum2num_14[]= { 59, 68, 77, 86, 95, 149, 158, 167, 176, 185, 194, 239, 248, 257, 266, 275, 284, 293, 329, 338, 347, 356, 365, 374, 383, 392, 419, 428, 437, 446, 455, 464, 473, 482, 491, 509, 518, 527, 536, 545, 554, 563, 572, 581, 590, 608, 617, 626, 635, 644, 653, 662, 671, 680, 707, 716, 725, 734, 743, 752, 761, 770, 806, 815, 824, 833, 842, 851, 860, 905, 914, 923, 932, 941, 950 }; int sum2num_15[]= { 69, 78, 87, 96, 159, 168, 177, 186, 195, 249, 258, 267, 276, 285, 294, 339, 348, 357, 366, 375, 384, 393, 429, 438, 447, 456, 465, 474, 483, 492, 519, 528, 537, 546, 555, 564, 573, 582, 591, 609, 618, 627, 636, 645, 654, 663, 672, 681, 690, 708, 717, 726, 735, 744, 753, 762, 771, 780, 807, 816, 825, 834, 843, 852, 861, 870, 906, 915, 924, 933, 942, 951, 960 }; int sum2num_16[]= { 79, 88, 97, 169, 178, 187, 196, 259, 268, 277, 286, 295, 349, 358, 367, 376, 385, 394, 439, 448, 457, 466, 475, 484, 493, 529, 538, 547, 556, 565, 574, 583, 592, 619, 628, 637, 646, 655, 664, 673, 682, 691, 709, 718, 727, 736, 745, 754, 763, 772, 781, 790, 808, 817, 826, 835, 844, 853, 862, 871, 880, 907, 916, 925, 934, 943, 952, 961, 970 }; int sum2num_17[]= { 89, 98, 179, 188, 197, 269, 278, 287, 296, 359, 368, 377, 386, 395, 449, 458, 467, 476, 485, 494, 539, 548, 557, 566, 575, 584, 593, 629, 638, 647, 656, 665, 674, 683, 692, 719, 728, 737, 746, 755, 764, 773, 782, 791, 809, 818, 827, 836, 845, 854, 863, 872, 881, 890, 908, 917, 926, 935, 944, 953, 962, 971, 980 }; int sum2num_18[]= { 99, 189, 198, 279, 288, 297, 369, 378, 387, 396, 459, 468, 477, 486, 495, 549, 558, 567, 576, 585, 594, 639, 648, 657, 666, 675, 684, 693, 729, 738, 747, 756, 765, 774, 783, 792, 819, 828, 837, 846, 855, 864, 873, 882, 891, 909, 918, 927, 936, 945, 954, 963, 972, 981, 990 }; int sum2num_19[]= { 199, 289, 298, 379, 388, 397, 469, 478, 487, 496, 559, 568, 577, 586, 595, 649, 658, 667, 676, 685, 694, 739, 748, 757, 766, 775, 784, 793, 829, 838, 847, 856, 865, 874, 883, 892, 919, 928, 937, 946, 955, 964, 973, 982, 991 }; int sum2num_20[]= { 299, 389, 398, 479, 488, 497, 569, 578, 587, 596, 659, 668, 677, 686, 695, 749, 758, 767, 776, 785, 794, 839, 848, 857, 866, 875, 884, 893, 929, 938, 947, 956, 965, 974, 983, 992 }; int sum2num_21[]= { 399, 489, 498, 579, 588, 597, 669, 678, 687, 696, 759, 768, 777, 786, 795, 849, 858, 867, 876, 885, 894, 939, 948, 957, 966, 975, 984, 993 }; int sum2num_22[]= { 499, 589, 598, 679, 688, 697, 769, 778, 787, 796, 859, 868, 877, 886, 895, 949, 958, 967, 976, 985, 994 }; int sum2num_23[]= { 599, 689, 698, 779, 788, 797, 869, 878, 887, 896, 959, 968, 977, 986, 995 }; int sum2num_24[]= { 699, 789, 798, 879, 888, 897, 969, 978, 987, 996 }; int sum2num_25[]= { 799, 889, 898, 979, 988, 997 }; int sum2num_26[]= { 899, 989, 998 }; int sum2num_27[]= { 999 }; num_list_t sum2num[28]= { { 0, sum2num_00 }, { 1, sum2num_01 }, { 2, sum2num_02 }, { 3, sum2num_03 }, { 4, sum2num_04 }, { 5, sum2num_05 }, { 6, sum2num_06 }, { 7, sum2num_07 }, { 8, sum2num_08 }, { 9, sum2num_09 }, { 10, sum2num_10 }, { 11, sum2num_11 }, { 12, sum2num_12 }, { 13, sum2num_13 }, { 14, sum2num_14 }, { 15, sum2num_15 }, { 16, sum2num_16 }, { 17, sum2num_17 }, { 18, sum2num_18 }, { 19, sum2num_19 }, { 20, sum2num_20 }, { 21, sum2num_21 }, { 22, sum2num_22 }, { 23, sum2num_23 }, { 24, sum2num_24 }, { 25, sum2num_25 }, { 26, sum2num_26 }, { 27, sum2num_27 }, }; /************************************************/ int main( int argc, char *argv[] ) { int i, sum; argc--; argv++; if ( argc != 1 ) { fprintf( stderr, "Usage: sum2num #\n" ); exit( 2 ); } sum= atoi( argv[0] ); if ( sum<0 || sum>27 ) { fprintf( stderr, "Invalid sum: %d\n", sum ); exit( 1 ); } printf( "Sum=%d numbers=", sum ); for ( i= 0; i<sum2num[sum].count; i++ ) { printf( " %d", sum2num[sum].list[i] ); } printf( "\n" ); return 0; } /* main() */
Объяснение кода листинга программы
Этот код на C генерирует последовательности чисел, сумма цифр которых равна заданному числу. Он использует массив sum2num
, который содержит 28 элементов, каждый из которых представляет собой последовательность чисел, сумма цифр которых равна номеру этого элемента в массиве.
Программа принимает один аргумент командной строки - число, которое должно быть суммой цифр последовательности. Затем она проверяет, что это число находится в допустимом диапазоне (от 0 до 27), и выводит сообщение об ошибке, если это не так.
Затем программа выводит сообщение Sum=... numbers=
, за которым следуют числа из соответствующей последовательности, разделенные пробелами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д