c - 如何组合两个数组并输出描述中所写的存储值。可能有一些方法可以做到这一点?

标签 c arrays max

任务描述-> Whole task description is here

我已经完成了部分排序并卡住了。 如何将这些数组组合成一对已排序的数组?


printf("\nHeight of boys in descending order\n");

for (i = (LENGTH1 - 1); i >= 0; i--)
{
    printf("%d ", heightBoys[i]);
}

for (i = 0; i < LENGTH2; i++)
{
    for (j = 0; j < (LENGTH2 - j - 1); j++)
    { 
        if (heightGirls[j] > heightGirls[j+1])
        {
            temp = heightGirls[j];
            heightGirls[j] = heightGirls[j+1];
            heightGirls[j+1] = temp;
        }
    }
}

printf("\nHeight of girls in descending order\n");

for (j = (LENGTH2 - 1); j >= 0; j--)
{
    printf("%d ", heightGirls[j]);
}

最佳答案

你有一个[给女 child 的],但它坏了。变化:

for (j = 0; j < (LENGTH2 - j - 1); j++)

进入:

for (j = 0; j < (LENGTH2 - i - 1); j++)

为避免[不必要的]代码复制,将排序代码放入单独的函数中。

对两个数组进行排序。

取两个数组长度的最小值(例如minlen)。

我不确定“配对”[确切]是什么意思,但最简单的方法是打印配对

然后,继续:

for (i = 0;  i < minlen;  ++i)
    printf("Girl:%d Boy:%d\n",heightGirls[i],heightBoys[i]);

如果您需要更复杂的东西,您可能需要一个 struct 数组,例如:

struct pair {
    int boyheight;
    int girlheight;
};

这个数组的长度至少需要minlen。您可以通过调整最终打印循环来填充它。


但是,如果您只是打印,这里有一些示例代码:

#include <stdio.h>

void
print_single(const int *height,int len,const char *sex)
{

    printf("\nHeight of %s in descending order\n",sex);

    for (int i = (len - 1); i >= 0; i--)
        printf(" %d", height[i]);

    printf("\n");
}

void
sort_height(int *height,int len)
{

    for (int i = 0; i < len; i++) {
        for (int j = 0; j < (len - i - 1); j++) {
            if (height[j] > height[j + 1]) {
                int temp = height[j];
                height[j] = height[j + 1];
                height[j + 1] = temp;
            }
        }
    }
}

int
main(void)
{

    int heightBoys[] = { 5, 8, 7, 9, 6 };
    int heightGirls[] = { 3, 1, 2 };

    int LENGTH1 = sizeof(heightBoys) / sizeof(heightBoys[0]);
    int LENGTH2 = sizeof(heightGirls) / sizeof(heightGirls[0]);

    sort_height(heightBoys,LENGTH1);
    print_single(heightBoys,LENGTH1,"boys");

    sort_height(heightGirls,LENGTH2);
    print_single(heightGirls,LENGTH2,"girls");

    int minlen = LENGTH1;
    if (minlen > LENGTH2)
        minlen = LENGTH2;

    printf("\n");
    printf("Pairing:\n");
    for (int i = 0;  i < minlen;  ++i)
        printf("Girl:%d Boy:%d\n",heightGirls[i],heightBoys[i]);

    return 0;
}

更新:

Let's say that we input heights and number of them by ourselves. If we have extra heights of boys or girls, how can we output these extra heights apart from the rest?

附加到底部的两个额外的 for 循环应该可以解决问题。为了使其工作,必须在循环外部定义上一个示例中最终for 循环的迭代变量。换句话说,请注意下面 ipair 的定义和用法。

如果您正在创建我建议的 struct 类型的数组,这些循环可以填充它。然后数组大小需要为 max (长度 1,长度 2)

并且,在未配对的循环中(例如,对于男孩 8,结构中的女孩值可以设置为 0 或 -1,以指示男孩未配对)

#include <stdio.h>

void
print_single(const int *height,int len,const char *sex)
{

    printf("\nHeight of %s in descending order\n",sex);

    for (int i = (len - 1); i >= 0; i--)
        printf(" %d", height[i]);

    printf("\n");
}

void
sort_height(int *height,int len)
{

    for (int i = 0; i < len; i++) {
        for (int j = 0; j < (len - i - 1); j++) {
            if (height[j] > height[j + 1]) {
                int temp = height[j];
                height[j] = height[j + 1];
                height[j + 1] = temp;
            }
        }
    }
}

int
main(void)
{

    int heightBoys[] = { 5, 8, 7, 9, 6 };
    int heightGirls[] = { 3, 1, 2 };

    int LENGTH1 = sizeof(heightBoys) / sizeof(heightBoys[0]);
    int LENGTH2 = sizeof(heightGirls) / sizeof(heightGirls[0]);

    sort_height(heightBoys,LENGTH1);
    print_single(heightBoys,LENGTH1,"boys");

    sort_height(heightGirls,LENGTH2);
    print_single(heightGirls,LENGTH2,"girls");

    int minlen = LENGTH1;
    if (minlen > LENGTH2)
        minlen = LENGTH2;

    int ipair = 0;

    printf("\n");
    printf("Pairing:\n");
    for (;  ipair < minlen;  ++ipair)
        printf("Girl:%d Boy:%d\n",heightGirls[ipair],heightBoys[ipair]);

    if (ipair < LENGTH1) {
        printf("\n");
        printf("Unpaired Boys:\n");
        for (int i = ipair;  i < LENGTH1;  ++i)
            printf("Boy:%d\n",heightBoys[i]);
    }

    if (ipair < LENGTH2) {
        printf("\n");
        printf("Unpaired Girls:\n");
        for (int i = ipair;  i < LENGTH2;  ++i)
            printf("Girl:%d\n",heightGirls[i]);
    }

    return 0;
}

关于c - 如何组合两个数组并输出描述中所写的存储值。可能有一些方法可以做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53054182/

相关文章:

arrays - 如何在 C 编程中将 char 数组转换为 int 数组?

压缩二维数组

c++为对象分配重载数组索引运算符

javascript - 字符串数组的逻辑 &&

python - 在 80x60 RGB 像素阵列上优化生命游戏迭代

编译 libxml2 得到 "error: storage size of ‘hints’ 未知”

mysql - 找到支付最高薪水的部门

JavaScript 日期 MAX_VALUE

javascript - 如何更有效地从 CodeSignal 获得 arrayMaxConsecutiveSum?

c - 如何让scanf()接收b的值?