다음 배열, while 와 for 순환 에 대하 여

2391 단어
다음 배열, while 와 for 순환 에 대하 여
다음 배열 의 함 수 를 가 져 오 려 면 알고리즘 은 주어진 숫자 서열 을 사전 순서 에서 다음 더 큰 배열 로 다시 배열 해 야 합 니 다.
다음 더 큰 배열 이 존재 하지 않 는 다 면 숫자 를 가장 작은 배열 (즉, 오름차 배열) 로 다시 배열 합 니 다.
제자리 에서 수정 해 야 합 니 다. 추가 상수 공간 만 사용 할 수 있 습 니 다.
다음은 일부 예 입 니 다. 입력 은 왼쪽 열 에 있 고 해당 출력 은 오른쪽 열 에 있 습 니 다.1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1
void nextPermutation(int* nums, int numsSize) {
    int n = numsSize - 1;
    for(; n > 0; n--)   //       while(n--)
    {
        if (nums[n] > nums[n-1])
        {
            nums[n-1] += nums[n];
            nums[n] = nums[n-1] - nums[n];
            nums[n-1] = nums[n-1] -nums[n];
            break;
        }
    }
    if (n == -1)
    {
        for (n=numsSize - 1; n >= 0; n--)
            printf("%d", nums[n]);
    }
    else
        for (n=0; n < numsSize; n++)
            printf("%d ", nums[n]);

    printf("
"
); }

for 순환 처 에서 while (n – > 0) 결 과 를 사용 하기 시 작 했 습 니 다. 프로그램 이 어떻게 실행 되 는 지 정확 하지 않 습 니 다. 생각 이 틀 렸 습 니 다. 어색 합 니 다. gdb 가 따라 잡 았 습 니 다. while 순환 에서 순환 제어 변수 n 의 값 변화 가 틀 렸 습 니 다. 순환 제어 문 구 를 다시 보 겠 습 니 다. while (n – > 0)여기 서 순환 체 n 에 들 어 가 는 값 은 n - 1 입 니 다. 이것 도 while 구문 과 for 의 차이 입 니 다. for 는 순환 체 실행 이 끝나 야 n - 1 작업 을 합 니 다.
3 년 동안 일 한 우리 로 서 이 잘못 은 난처 한 것 입 니 다..................................................................

좋은 웹페이지 즐겨찾기