我有一些要修改的C代码真的很简单。
假设我有两个这样的数组
int v1[5] = {1, 3, 7, 13, 10};
int v2[2] = {1, 10};
我想打印一些不常见的元素(差异),例如:
3, 7, 13
这是我的尝试,还不够:
#include <stdio.h>
int main()
{
int v1[5] = { 1, 3, 7, 13, 10 };
int v2[2] = { 1, 10 };
for (int i = 0; i < sizeof(v1) / (sizeof * v1); i++) {
for (int j = 0; j < sizeof(v2) / (sizeof * v2); j++) {
if (v1[i] != v2[j]) {
printf("%d ", v1[i]);
break;
} else {
break;
}
}
}
return 0;
}
这两个数组总是很短(最多6个元素)。Thery没有命令,我不应该修改它们。每个元素中的元素都是唯一的,即每个数字在每个数组中只能出现1次。v2仅包含来自v1的元素的子集。实现这一目标的最有效方法是什么?
您可以从获取任何数组开始,然后逐个元素地对其进行迭代,然后通过嵌套的for循环查找该元素是否也在第二个数组中,然后将if条件放入内部for循环中,然后将公共元素存储在另一个数组中,然后将两者进行比较将该数组与该数组一一对应,然后将不常见的元素放入另一个数组中。
喜欢:
int a[min(l1,l2)], b[l], x = 0, k = 0, flag = 1;
for(int i=0; i<l1; i++){
for(int j=0; j<l2; j++){
if(v1[i]==v2[j]){
a[k] = v1[i];
k++;
}
}
}
for(int i=0; i<l1; i++){
flag = 1;
for(int j=0; j<k; j++){
if(v1[i] == a[j]){
flag = 0;
break;
}
}
if(flag==1){
b[x] = v1[i];
x++;
}
}
for(int i=0; i<l2; i++){
flag = 1;
for(int j=0; j<k; j++){
if(v2[i] == a[j]){
flag = 0;
break;
}
}
if(flag==1){
b[x] = v2[i];
x++;
}
}
之后,您可以打印阵列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句