You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
#include<bits/stdc++.h>
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
//<2F><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>Ԫ<EFBFBD><D4AA>
|
|
|
|
|
void prt(int arr[], int end) {
|
|
|
|
|
for (int i = 0; i <= end; ++i) {
|
|
|
|
|
printf("%d", arr[i]);
|
|
|
|
|
}
|
|
|
|
|
printf("\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void perm(int arr[], int len) {
|
|
|
|
|
if (len < 2) return;
|
|
|
|
|
int i, j, temp;
|
|
|
|
|
while(1) {
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|
|
|
|
prt(arr, len - 1);
|
|
|
|
|
i = j = len - 1;
|
|
|
|
|
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ԫ<EFBFBD><D4AA>
|
|
|
|
|
while (i > 0 && arr[i] < arr[i - 1]) --i;
|
|
|
|
|
temp = i;
|
|
|
|
|
if (i == 0) break;
|
|
|
|
|
//<2F>Ⱥ<EFBFBD><C8BA><EFBFBD><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>arr[i-1]<5D><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
|
|
|
|
|
while (temp + 1 < len && arr[temp + 1] > arr[i - 1]) ++temp;
|
|
|
|
|
swap(arr[i - 1], arr[temp]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
reverse(arr + i, arr + len); //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
|
{
|
|
|
|
|
int arr[3] = { 3,1,2 };
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
sort(arr, arr + 3);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
|
|
|
|
perm(arr,3);
|
|
|
|
|
}
|