gpt4 book ai didi

c - 需要逻辑方面的帮助 (C)

转载 作者:行者123 更新时间:2023-11-30 19:24:23 25 4
gpt4 key购买 nike

我需要交换两个非重复序列(数组)中的前 n 个元素,其中 n 是一个随机整数。

序列1:1 4 5 6 9 8 2 3 7

序列2:3 9 1 2 8 7 4 5 6

如果 n = 4

序列1:3 9 1 2 | 9 8 2 3 7

序列2:1 4 5 6 | 8 7 4 5 6

现在我需要通过替换“|”后的重复数字来修复序列。

如何做到这一点?

这是我的努力..

for(left1 = 0; left1<pivot; left1++)
{
for(right1 = pivot; right1 < no_jobs; right1++)
{
if(S1->sequence[left1] == S1->sequence[right1])
{
for(left2 = 0; left2<pivot; left2++)
{
for(right2 = pivot; right2<no_jobs; right2++)
{
if(S2->sequence[left2] == S2->sequence[right2])
{
swap_temp = S1->sequence[right1];
S1->sequence[right1] = S2->sequence[right2];
S2->sequence[right2] = swap_temp;
break;
}
}
}
}
}
}

最佳答案

使用单个 for 循环交换前 n 个元素非常简单。

for(int i = 0; i < n; i++){
int tmp = array1[i];
array1[i] = array2[i];
array2[i] = tmp;
}

现在您需要找出数组中发生了什么变化。您可以通过比较交换的部件来做到这一点。

int m1 = 0, m2 = 0;
int missing_array1[n];
int missing_array2[n];

for(int i = 0; i < n; i++){
bool found = false;
for(int j = 0; j < n; j++){
if(array1[i] == array2[j]){
found = true;
break;
}
}
if(!found){
missing_array2[m2++] = array1[i];
}
}

for(int i = 0; i < n; i++){
bool found = false;
for(int j = 0; j < n; j++){
if(array2[i] == array1[j]){
found = true;
break;
}
}
if(!found){
missing_array1[m1++] = array2[i];
}
}

missing_array2 现在包含 array2 中缺少的数字。这些是将在 array1 中重复的所有数字。 Missing_array1 也是如此。接下来,您需要扫描两个数组并用缺失的数字替换重复的数字。

while(m1 >= 0){
int z = 0;
while(missing_array1[m1] != array2[n + z]){
z++;
}
array2[n + z] = missing_array2[m1--];
}

while(m2 >= 0){
int z = 0;
while(missing_array2[m2] != array1[n + z]){
z++;
}
array1[n + z] = missing_array1[m2--];
}

总之,您可以比较交换的部分,以找到每个数组中缺少的值。这些值也是将在相反数组中重复的值。然后扫描每个数组并用其中一个缺失值替换重复值(我假设您不关心哪个缺失值,只要所有值都是唯一的即可。

关于c - 需要逻辑方面的帮助 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3159631/

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