Генерация чисел с заданной суммой цифр - 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=, за которым следуют числа из соответствующей последовательности, разделенные пробелами.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.583 из 5
Похожие ответы