1. C++ / Говнокод #26386

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    #include <iostream>
    using namespace std;
    bool check(int a, int b){
    	int ass[10] = {0}, bass[10] = {0};
    	while(a){
    		ass[a % 10]++;
    		bass[b % 10]++;
    		a /= 10;
    		b /= 10;
    	}
    	for(int i = 0; i < 10; i++){
    		if(ass[i] != bass[i]) return false;
    	}
    	return true;
    }
    int main() {
    	for(int i = 1; i < 10; i++){
    		for(int j = 0; j < 10; j++){
    			for(int k = 0; k < 10; k++){
    				for(int l = 0; l < 10; l++){
    					for(int m = 0; m < 10; m++){
    						for(int n = 0; n < 10; n++){
    							for(int o = 0; o < 10; o++){
    								for(int p = 0; p < 10; p++){
    									for(int r = 1; r < 10; r++){
    											long long a =
    											i * 100000000
    											+ j * 10000000
    											+ k * 1000000
    											+ l * 100000
    											+ m * 10000
    											+ n * 1000
    											+ o * 100
    											+ p * 10
    											+ 3;
    											long long z = r * 10000000
    											+ r * 1000000
    											+ r * 100000
    											+ r * 10000
    											+ r * 1000
    											+ r * 100
    											+ r * 10
    											+ r;
    											if(check(a, a + z)){
    												cout << a << " " << z << endl;
    											}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    }

    Коротко о переборах.

    Запостил: Verenick, 28 Января 2020

    Комментарии (14) RSS

    • Какой перебор )))

      Кстати, в форте по стандарту в циклах со счётчиком есть доступ максимум к счетчику второго внешнего цикла: I - счеткчик текущего, J - счетчик внешнего, K - второго внешнего.
      Ответить
    • q пропустил.

      Учи афлавит!
      Ответить
    • <?php
      for ($i = 0; $i < $N; $i++) {
        echo "for(int i$i = 1; i$i < 10; i$i++)"
      }
      ?>
      Ответить
    • Я придумал цикл второго порядка:
      void bigfor(int level, int levels, int i[], int size, callback cb) {
          if (level == levels) {
              cb(i); 
          } else {
              for(i[level] = 0; i[level] < size; ++i[level]) {
                  bigfor(level + 1, levels, i, size, cb);
              }
          }
      }


      https://ideone.com/njXd64
      Ответить
      • Rhenm!
        Ответить
      • Надо добавить обход не только гиперкуба, а также убрать реку-курсию.
        Ответить
        • Тут можно обойтись одним циклом, а счётчики вложенных циклов получать из глобального. Точнее, двумя циклами: внешний по глобальному счётчику, а внутренний — по «вложенным» счётчикам:
          void bigfor(int levels, int i[], int size, callback cb) {
              int total_size = 1;
              for(int k = 0; k < levels; ++k) total_size *= size;
              
              for(int counter = 0; counter < total_size; ++counter) { // глобальный цикл
                  for(int k = 1; k < levels; ++k) { // цикл по счётчикам
                      if(i[k - 1] >= size) { // перенос в следующий разряд
                          i[k - 1] = 0;
                          ++i[k];
                      }
                  }
                  cb(i);
                  ++i[0];
              }
          }


          https://ideone.com/1q6l8F

          В этом примере счётчики вложенных циклов получились наоборот. Но я полагаю, что читателю не составит труда изменить направление вложенного цикла.
          Ответить
        • Ещё можно гиперкуб заменить гиперпараллелепипедом: вместо скаляра size подставить массив.

          Можно и гиперпараллелепипед заменить в известной степени произвольной фигурой. Для этого массив скаляров size[] заменяем массивом функций от предыдущих индексов.
          Ответить
    • Студентота поизмывалась над алгоритмом Евклида?
      Ответить

    Добавить комментарий