zoukankan      html  css  js  c++  java
  • UVA 120 Stacks of Flapjacks

            输入数字是以回车结束每一行,注意只输入一个数字情况。感觉这道题答案应该不唯一。下面代码是从后往前搜索,如果在相应位置就过去;如果不在就交换到第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;
    }
    


     

  • 相关阅读:
    junit源码解析--测试驱动运行阶段
    junit源码解析--初始化阶段
    junit源码解析--核心类
    junit测试套件
    junit参数化测试
    junit忽略测试方法
    Junit4常用注解
    泛型技术
    在使用Java8并行流时的问题分析
    Linux 常用性能分析命令
  • 原文地址:https://www.cnblogs.com/zcube/p/4194551.html
Copyright © 2011-2022 走看看