8-1 煎饼 Uva120(简单的颠倒子序列)

2018-03-15  本文已影响0人  laochonger

include <stdio.h>

include <stdlib.h>

include <string.h>

int cmp(const void *_a, const void _b) {
int
a = (int )_a;
int
b = (int *)_b;

return *a - *b;

}

void swap(int a[], int i, int j) {
while (i < j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
i++;
j--;
}
}

int main() {

int a[35], b[35], n;


while (scanf("%d", &a[0]) != EOF) {
    // 接收输入的数字
    n = 1;
    if (getchar() != '\n')
        while (scanf("%d", &a[n++]))
            if (getchar() == '\n')  break;

    // 输出原先的序列并复制一份给b数组
    for (int i=0; i<n; i++) {
        b[i] = a[i];
        printf("%d ", a[i]);
    }
    printf("\n");

    // 对b数组进行排序
    qsort(b, n, sizeof (int), cmp);

    // 从后往前遍历a数组
    for (int i=n-1; i>=0; i--) {
        // 如果a[i]的值在排好序的位置就不执行下面的for循环
        if (a[i] == b[i])   continue;
        for (int j=i-1; j>=0; j--) {
            // 如果a[i]的值与位置不符就从前面找到该位置的数
            if (b[i] == a[j]) {
                // 如果该数在第0个位置就直接交换
                if (j == 0) {
                    printf("%d ", n - i);
                    swap(a, 0, i);
                }
                // 如果不在第0个位置就先交换到第0位置再交换到相应位置
                else {
                    printf("%d ", n - j);
                    swap(a, 0, j);
                    printf("%d ", n - i);
                    swap(a, 0, i);
                }
            }
        }
    }

    printf("0\n");
}

return 0;

}

上一篇下一篇

猜你喜欢

热点阅读