크기가 n 인 배열이 주어지면 배열에 하나의 요소 만 존재하고 그 값을 반환 할 때까지 배열의 모든 m 번째 요소를 삭제하는 함수를 작성해야합니다. 누군가 나에게 힌트를 줄 수 있습니까?배열의 m 번째 요소를 삭제하십시오.
답변
순진 방법은 그것을 할 수 있습니다 :
- 시작 요소 m에서 포인터에 의해 내가 원하지 않기 때문에 새로운를 재구성해야 할,이 마커를 넣어 의미 삭제 (삭제 배열을 삭제할 때마다 배열)
- 포인터를 증가 시키십시오 m 번. 삭제 된 요소를 가리키는 경우 카운터를 1 줄여서 m 이전 항목으로 이동하십시오. 배열 끝에서 벗어나면 0 위치로 다시 이동하십시오.
- 삭제 한 항목 수를 기록하십시오. n-1 이후에 중지하십시오.
배열을 순환 링크 된 목록을 사용하는 비 순진한 방법입니다. –
하지만 그는 배열이 있다고 말합니다. – danben
python에서는 실제로 항목을 삭제하는 대신 실행마다 목록을 재구성합니다. 아마도 더 잘할 수있을 것입니다.
이것은 첫 번째 (0 번째) 항목이 처음으로 이동해야한다는 것을 고려합니다. 당신이 해결하려고하는 것처럼
def lms(l, m, r=0):
"""Return last man standing in the lineup l where every mth man is
executed."""
if len(l) == 1: return l[0]
return lms(
[l[x] for x in range(len(l)) if (r + x) % m], # new list without exec.
m, # frequency
(r + len(l)) % m) # remainder from this round
def get_lms(n, m):
"""Just a setup function, which creates a plain range list to serve to the function.
Any list of any items can be used."""
l = [x for x in range(n)]
return lms(l, m)
>>> get_lms(10, 3):
3
OP는 어디에서 첫 번째 요소가 항상 삭제된다고 말합니까? – Juliet
@Juliet - Nowhere. 그러나 그는 그렇게해서는 안된다고 말하지 않습니다. 나는 대안을 제공하고 있습니다. –
는 소리 Josephus Problem :
실행을 기다리고 원 에 서있는 사람들이있다. 첫 번째 사람이 실행 된 후 특정 숫자 명이 건너 뛰고 한 명의 사람이 으로 실행됩니다. 그런 다음 다시 사람들은 을 건너 뛰고 사람이 처형됩니다. 제거는 동그라미 (처형 된 사람들이 제거됨에 따라 이 작아짐), , 마지막 사람 만 남을 때까지 에게 자유가 주어질 때까지 진행됩니다.
작업은 (남은 마지막 것)이되도록 초기 서클에서 장소를 선택하는 것입니다.
위키 기사는 위의 문제에 대한 매우 간단한 재귀 솔루션을 포함 할 수 n은 사람들의 수는 K = 사람들은, 삭제 당 건너 :
f(1, k) = 0
f(n, k) = (f(n - 1, k) + k) % n
이것은 행의 첫 번째 사람이 실행 된 것을 고려하지 않습니다. 첫 번째 k 명을 건너 뜁니다. 비록 이것이 아마도이 방법 일지라도 OP는 그것을하고 싶어합니다. –
내가 구현하기 위해 노력했다. .bt 높은 복잡성을
public static void DeleteM(int[] arr, int m)
{
int k = m;
int count = 0;
while (count<arr.Length-1)
{
if (m < arr.Length && arr[m]!=-1)
{
arr[m] = -1; //Mark it
count++;//Set the marked count
m = m + k;
}
else
{
int i = 0;
if (arr[i] == -1)
{
while (arr[i] == -1 && i < arr.Length)
{
i++;
}
}
m = i;
}
}
for(int i=0;i<arr.Length;i++)
if (arr[i] != -1) Console.WriteLine(arr[i]);
}
n,k=map(int,raw_input().split())
ans=0
for i in range(1,n+1):
ans=(ans+k)%i
print ans+1
사용이 기능이이 answer를 참조 할 것.
도움이 되길 바랍니다.
function removeAtNth($array, $nth)
{
$step = $nth - 1; //gaps between operations
$benchmark = 0;
while(isset($array[1]))
{
$benchmark += $step;
$benchmark = $benchmark > count($array) -1 ? $benchmark % count($array) : $benchmark;
unset($array[$benchmark]);
$array = array_values($array);
echo implode('', $array)."\n";
}
}
시험 :
$array = [1,2, 3,4,5,6,7,8];
removeAtNth($array, 3);
결과 :
[email protected]:~$ php test.php
1245678
124578
24578
2478
478
47
7
- 1. 값에 따라 다차원 배열의 요소를 삭제하십시오.
- 2. 프롤로그 목록에서 첫 번째 N 요소를 삭제하십시오.
- 3. array_shift 배열의 첫 번째 요소를 제거하지
- 4. 파이썬에서 배열의 첫 번째 요소를 가져오고 싶습니까?
- 5. Objective C에서 배열의 첫 번째 요소를 제거하려면 어떻게합니까?
- 6. 배열의 첫 번째 요소 $$ foo
- 7. 배열의 두 요소를 비교하지 못했습니다.
- 8. 배열의 요소를 무작위로 추출 하시겠습니까?
- 9. Grails에서 0 번째 자식이있는 모든 자기 참조 M : M 찾기
- 10. MATLAB에서 루프를 사용하지 않고 행렬의 각 m-by-m 창에서 n 요소를 추출하려면 어떻게합니까?
- 11. PHP로 문자열의 첫 번째 인스턴스를 삭제하십시오.
- 12. mongodb에서 배열의 n 번째 원소를 지우는 법
- 13. Dwoo에서 배열의 첫 번째 요소 가져 오기
- 14. PHP - 배열의 첫 번째 요소에 쓰기
- 15. 배열의 매 100 번째 요소에 대해 무언가를하십시오.
- 16. PHP - 다른 배열의 요소를 기반으로 배열 요소를 정렬 :)
- 17. 배열의 각 요소를 서로 비교하십시오.
- 18. 배열의 요소를 읽는 액세스 위반
- 19. 배열의 두 요소를 비교하지 못했습니다.
- 20. 2 차원 배열의 무작위 요소를 똑같이 선택하십시오.
- 21. PHP : 배열의 배열의 첫 번째 "열"에서 검색
- 22. 멋지게 2 차원 배열의 특정 요소를 액세스하십시오.
- 23. 들쭉날쭉 한 배열의 처음 세 요소를 얻으십시오.
- 24. 배열의 요소를 설정하고 배열의 요소를 설정 해제하고 설정을 바꾸는 것이 왜 다른가요? 아래에서
- 25. json_encode는 배열의 첫 번째 요소 만 반환합니까?
- 26. 문자열에서 문자열 배열의 첫 번째 위치 찾기
- 27. 배열의 n 번째 객체에 바인드 값
- 28. 배열의 첫 번째 최소 윈도우 찾기
- 29. 배열의 두 번째 차원에서 $ _POST 값
- 30. 다차원 배열의 첫 번째 레이어에 array_key_exist
언어? – Sarfraz
누가 신경 써? 그것은 배열입니다. – danben
숙제 인 samir 인 경우 태그로 지정하십시오. –