从键盘输入4个整数,要求设4个指针变量p1,p2,p3,p4,输出时按照先奇后偶的顺序输出,并且在奇数和偶数中分别按从小

1个回答

  • #include

    int main() {

    std::cout << "input 4 numbers:";

    int a, b, c, d;

    std::cin >> a >> b >> c >> d;

    int *p1 = &a, *p2 = &b, *p3 = &c, *p4 = &d;

    // 思路

    // 按照先奇后偶,先小后大的顺序排序..

    // 为方便排序,做二级指针数组

    // 用冒泡排序

    int **p[4] = {&p1, &p2, &p3, &p4};

    // 将最大的沉底

    for (int i = 0; i < 4; ++i) {

    bool swap = false;

    for (int j = 0; j < 3 - i; ++j) {

    int t0 = **p[j] % 2;

    int t1 = **p[j + 1] % 2;

    // 如果 t0 < t1,说明 **p[j] 是偶数,**p[j+1]是奇数

    // 如果 t0 == t1,说明 奇偶相同,然后判断 大小..

    if ((t0 < t1) || (t0 == t1 && **p[j] > **p[j + 1])) {

    int *t = *p[j];

    *p[j] = *p[j+1];

    *p[j+1] = t;

    swap = true;

    }

    }

    if (!swap) {

    break;

    }

    }

    std::cout << *p1 << " " << *p2 << " " << *p3 << " " << *p4 << std::endl;

    return 0;

    }我想这是最简洁的代码了,哪里不懂就追问.