美文网首页
8-1 煎饼 Uva120(简单的颠倒子序列)

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

作者: laochonger | 来源:发表于2018-03-15 08:32 被阅读0次

    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;
    

    }

    相关文章

      网友评论

          本文标题:8-1 煎饼 Uva120(简单的颠倒子序列)

          本文链接:https://www.haomeiwen.com/subject/fnpxqftx.html