Кресты / Говнокод #26386 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 Verenick, (Updated )

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

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

    Кстати, в форте по стандарту в циклах со счётчиком есть доступ максимум к счетчику второго внешнего цикла: I - счеткчик текущего, J - счетчик внешнего, K - второго внешнего.
    Ответить
  • Я придумал цикл второго порядка:
    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
    Ответить
    • Надо добавить обход не только гиперкуба, а также убрать реку-курсию.
      Ответить
      • Тут можно обойтись одним циклом, а счётчики вложенных циклов получать из глобального. Точнее, двумя циклами: внешний по глобальному счётчику, а внутренний — по «вложенным» счётчикам:
        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[] заменяем массивом функций от предыдущих индексов.
        Ответить
  • Студентота поизмывалась над алгоритмом Евклида?
    Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8