주어진 N 개의 양의 정수의 순열을 표현하려고합니다.
예. 각 숫자에 대해 4 비트 이하를 사용하는 숫자 1-16의 임의의 순열을 나타냅니다.비트의 정수 순열 표현
아이디어는 64 비트 대신 8 * 4 + 4 * 3 + 2 * 2 + 1 * 1 = 49 비트에서 16의 순열을 나타낼 수 있다는 것입니다.
예제 데이터 세트는 다음과 같습니다 [10 1 3 11 2 12 8 7 4 6 9 13 15 16 5 14].
나는 이것을 달성하기 위해 다음과 같은 C 프로그램을 시도했지만 벡터 주어진 정수의 위치를 저장하는 프로그램에서 벡터를 사용하는 방법을 잘 모르겠습니다.
이 문제가 있습니다 :
정수가 1-16의 범위라면, 더 멀리 계산할 필요가있는 위치는 [0]에 저장됩니다.
void main()
{
int position[16];// a vector
int buffer[16] = {10, 1,3, 11, 2, 12, 8, 7, 4, 6, 9, 13, 15, 16, 5, 14};
int buffer_copy[16];// copy of original buffer
int i, j;
for (i=0; i<16; i++)
{
buffer_copy[i]=buffer[i];
}
for(i=0; i<16; i++)
{
position[buffer[i]]= i;
printf("\n the position of element %d in position array is: %d",
buffer[i], position[buffer[i]]);
}
int next = 8;
for (i =1; i<16; i++)
{
int pos, q=0;
pos = position[i];
// **To check the number of positions unchecked between 0 and pos.**
for (j=0; j<pos; j++)
{
if(buffer_copy[j]>=0)
{
q=q+1;
}
buffer_copy[pos] =-1;
}
printf("\n the value for Q is :%d", q);
}
}
은 위의 코드는 내가이 올바른지 여부를 확인하지 오전 다음과 같은 출력을 보여주고있다 :
다음은 내가 사용했던 코드의 조각이다.
위치 배열 요소 (10)의 위치는이다 : 0
위치 배열의 요소 1의 위치는 : 1
위치 배열의 요소 (3)의 위치는 2
위치의 소자 (11)의 위치 어레이는 : 3
위치 배열의 요소 (2)의 위치는 다음 4
위치 배열 요소 (12)의 위치는 다음 5
위치 배열 요소 (8)의 위치는 6
소자 (7)의 총수 위치 배열은 7
입니다. 위치 배열 요소 (4)의 위치가: 8
위치 어레이 소자 (6)의 위치는 9
위치 어레이 소자 (9)의 위치는 다음과 위치 배열 요소 (13)의 위치가 10
: 11
위치 배열 요소 (15)의 위치는 12
위치 배열 요소 (16)의 위치는 13
위치 배열 요소 (5)의 위치는 14
위치 배열 요소 (14)의 위치 다음과 같습니다 : 15
Q 값은 다음과 같습니다. 1
va Q 용 루이다 : 3
Q 값은 다음과 Q 값이 5
: Q 값이 10
: Q 값이 5
: Q의 값은 1
: 4
Q 값은 3
Q 값은 3
Q 값은 : Q의 값은 1
: Q의 값은 0
값 1
Q는 다음과 같습니다. 1
값 Q는 다음과 같습니다. 3
Q의 값은 다음과 같습니다. 1
이 작업을 수행하는 데 도움이 될만한 의견이나 제안이 있으면 감사드립니다.
댓글이 확장 된 논의하지 않습니다; 이 대화는 [채팅으로 이동되었습니다] (http://chat.stackoverflow.com/rooms/159422/discussion-on-question-by-user5424164-representation-of-permutation-of-integer-i). – Andy