gpt4 book ai didi

c - 在C中将一个数组的元素递减地放在另一个数组上

转载 作者:行者123 更新时间:2023-11-30 16:37:06 25 4
gpt4 key购买 nike

我是 C 语言新手,我有一个关于数组的问题

我有两个数组,其中元素的存储顺序递减:

int a[]={50, 40, 25, 8, 6};

int b[] = {38, 25, 2};

我假装将两个数组中较大的元素存储在数组 a 中,并丢弃其余的元素。做这样的事情

int a[]={50, 40, 38, 25, 25}

我知道我必须使用循环,但我不知道要放什么,比如这样

#include<stdio.h>

int main(){
int a[]={50, 40, 25, 8, 6};
int b[] = {38, 25, 2};
int i, j, w, x;

for(i=0; i<3; i++){

for(j=0; j<5; j++){
x=b[i];
w=j;
while(w>0 && a[j-1]<b[i]){
a[w]=a[w-1];
j--;
}
a[w]=x;
}
}


for(i=0;i<5; i++){
printf("[%d]", a[i]);
}
return 0;
}

但不起作用。谢谢:)

最佳答案

由于您的任务是填充 5 的数组,因此您只需要 1 次循环即可达到 5

#include <stdio.h>

int main(){

int a[]={50, 40, 25, 8, 6};
int b[] = {38, 25, 2};
int i, val[5];
int ai = 0, bi = 0; //current a index and b index

for(i=0; i<5; i++){

if (a[ai] > b[bi]) {
val[i] = a[ai];
ai++;
}
else {
val[i] = b[bi];
bi++;
}
}

for(i=0;i<5; i++){
printf("[%d]", val[i]);
}
return 0;
}

编辑:

就像有人提到的那样,您还需要注意其中一个数组中的元素用完的情况。例如,如果 b 的所有元素都加载到 val 中,那么索引 bi 最终将是 3 ,这是越界的,并且检查 if (a[ai] > b[3] ) 可能会导致问题。

要解决这个问题,在比较之前添加一个简单的检查就足够了由于这有点家庭作业,并且数组 a 与结果数组的大小相同,因此您可以简单地检查 bi

if ((bi < 3) && (a[ai] > b[bi])) {
//...

关于c - 在C中将一个数组的元素递减地放在另一个数组上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48123661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com