什么奇怪的思路
查看原帖
什么奇怪的思路
1290717
ridbor001楼主2024/2/28 23:43

我的思路是加n,每次加1代表着从右向左,第一个比右边大的数字x增大一点点,也就是x变为他的右边最小的那个数,之后x右边的数正序排序,就是加1,这样循环n次就行了

#define _CRT_SECURE_NO_WARNINGS  
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <time.h>  

int arr[10000] = { 0 };
int add = 0;
int temp[2] = { 50000,50000 }; //左是arr[x],右是具体的值

int cmp(const void* a , const void* b) {
	return *(int*)a - *(int*)b;
}

int main(){
	int n = 0;
	int now = 0;
	scanf("%d%d", &n,&add);
	for (int i = 0; i < n; i++){
		scanf("%d", arr + i);
	}
	while (add) {
		temp[1] = 50000;
		for (int i = n-1; i > 0; i--) {
			if (arr[i] <= arr[i-1])
				continue;
			else {
				now = i - 1;
				int a = 0;
				add--;
				for (int j = n - 1; j > i - 1; j--) {
					if (arr[j] > arr[i - 1] && arr[j] < temp[1]) {
						temp[0] = j;
						temp[1] = arr[j];
					}
				}
				a = arr[temp[0]];
				arr[temp[0]] = arr[now];
				arr[now] = a;
				qsort(arr + now + 1, n - now-1, sizeof(int), cmp);
				break;
			}
		}
	}
	for (int i = 0; i < n; i++) {
		printf("%d ", arr[i]);
	}
}
2024/2/28 23:43
加载中...