c언어 배열 관련 질문
글쓴이: seopy / 작성시간: 화, 2019/07/30 - 1:13오전
제가 10진수를 2진수로 변경해서 총 8개를 출력하고(000~111) -> arr이라는 배열 안에 넣었습니다.
그 다음에 000을 기준으로 001부터 111까지 서로 비교하면서 두 개가 얼마나 차이나는지 dmin 이라는 변수에 저장했습니다.
처음에 000과 001을 비교 -> 000과 010을 비교 -> 000과 011을 비교 -> ... -> 000과 111을 비교
예를 들어, 몇 개를 비교해 차이를 구하자면 000과 010은 가운데만 다르므로 dmin에 1이 저장되있고, 000과 011은 2가 저장되어있는 식이죠.
그래서 여기까지는 잘 진행했습니다.
현재까지 진행한 것을 출력하면 dmin이 1 1 2 1 2 2 3 이렇게 나오게 되는데,
여기서 dmin이 2이상인 애들을 보기 위해 1인 애들을 걸러줍니다. 그러면 2 2 2 3 만 남게되죠.
2 2 2 3 => 011 101 110 111
이제 제가 궁금한 것을 질문하자면 이번에는 1인 애들을 걸러주고 나서 제일 위에 있는 수를 기준으로 남은 수와 위와 같은 방식으로 계산하고 싶은데
어떻게 해줘야할지 모르겠습니다. 여기에서는 011을 기준으로 계산하겠죠!
그래서 계산했을 때, dmin에 2 2 1 이 나오면 맞는건데..
#include <stdio.h> #include <iostream> #include "stdafx.h" const int M = 3; const int N = 1; const int SIZE = M * N; // SIZE = 3 int main() { int i, j; int modul[SIZE]; //modul[3] int arr[(1 << SIZE)][SIZE]; //arr[8][3] int cnt = 0; int temp, dmin; for (i = 0; i < (1 << SIZE); i++) { for (j = 0; j < SIZE; j++) { modul[j] = (i >> ((SIZE - 1) - j)) % 2; arr[i][j] = modul[j]; printf("%d ", modul[j]); // 2진수로 변환이 잘 되었는지 테스트 } cnt++; printf("\n"); temp = 0; for (j = 0; j < SIZE; j++) if (modul[j] == 1) temp++; } printf("---------------[cnt : %d]\n", cnt); for (i = 0; i < (1 << SIZE) - 1; i++) { dmin = 0; for (j = 0; j < SIZE; j++) { if (arr[0][j] != arr[i + 1][j]) // 000을 기준으로 001~111까지 비교 dmin++; } printf("%d ", dmin); // dmin 이 잘 나왔는지 테스트 if (dmin >= 2) { for (j = 0; j < SIZE; j++) { if (arr[3][j] != arr[i + 1][j]) dmin++; } } } printf("\n\n\n"); return 0; }
Forums:
댓글 달기