Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序:数组包含项目ID';s、 B数组包含已售出的商品查找C数组包含未售出的商品_C_Arrays - Fatal编程技术网

C程序:数组包含项目ID';s、 B数组包含已售出的商品查找C数组包含未售出的商品

C程序:数组包含项目ID';s、 B数组包含已售出的商品查找C数组包含未售出的商品,c,arrays,C,Arrays,这是我的程序,但不工作,因为它是不完整的 using namespace std; int main(){ int a[]={101,102,103,104,107,110}; int n = sizeof(a) / sizeof(int); int b[]={102,103,101}; int m = sizeof(b) / sizeof(int); int c[20]; static int k=0; int flag;

这是我的程序,但不工作,因为它是不完整的

using namespace std;

int main(){

    int a[]={101,102,103,104,107,110};
    int n = sizeof(a) / sizeof(int);

    int b[]={102,103,101};
    int m = sizeof(b) / sizeof(int);

    int c[20];
    static int k=0;
    int flag;

    for(int j=0;j<m;j++)
    {                          
        if(a[0]!=b[j])
        {
             c[k]=b[j];
             printf("c[%d]=%d\n",k,c[k]);
             k++;
        }
    }
    return 0;
}
使用名称空间std;
int main(){
int a[]={101102103104107110};
int n=sizeof(a)/sizeof(int);
int b[]={102103101};
int m=sizeof(b)/sizeof(int);
INTC[20];
静态int k=0;
int标志;

对于(int j=0;j我想你喜欢这样:

#include <iostream>
using namespace std;

int main(){

int a[]={101,102,103,104,107,110};
int n = sizeof(a) / sizeof(int);

int b[]={102,103,101};
int m = sizeof(b) / sizeof(int);

int c[20];
static int k=0;
int flag;
for(int i =0;i<n;i++){

    int f=0;
    for(int j=0;j<m;j++)
    {                          
        if(a[i]==b[j])
        {
            f=1;
        }

    }
    if(f==0)
    {
        c[k]=a[i];
        printf("c[%d]=%d\n",k,c[k]);
        k++;
    }
}
return 0;
}
编辑:接受的答案运行良好,但它将以二次时间=>O(n^2)执行,这将比此解决方案慢

你考虑过使用吗?它可以很好地计算像你这样的问题

如果n个项目放入m个容器中,且n>m,则至少一个容器必须包含多个项目

在您的情况下,将数组“a”中的所有项放入一个容器(数组),其索引与a中的实际数字相对应(使用for循环。操作为=>O(n))。遍历容器数组并标记包含b中项的所有位置。操作也将为O(n).最后,第三次检查容器数组,并拾取所有未售出的商品

下面是代码(我没有测试它,但我认为它应该工作得很好):

#包括
使用名称空间std;
int main(){
int a[]={101102103104107110};
int n=sizeof(a)/sizeof(int);
int b[]={102103101};
int m=sizeof(b)/sizeof(int);
INTC[20];
静态int k=0;
int标志;
int largestNumInA=0;

对于(int i=0;我建议您在尝试将算法转换为代码之前先在纸上写下算法。显示/描述您尝试实现的算法。您需要将
a
的每个元素与
b
进行比较,然后选择。
if(a[0]!=b[j])
这显然行不通,因为您总是在与相同的
a
元素进行比较。一个简单的解决方案可能涉及一个嵌套循环,将
a
中的每个元素与
b
中的每个元素进行比较(当然,匹配时短路)@kaylum我用它是因为,它显示B到C中除了A(即)101的第一个元素之外的所有元素。现在C包含102103。所以我想比较A和C来找到未售出的元素。你说“显示所有元素”是什么意思?就算法而言,第一个元素一点也不特殊。您需要对
a
的每个元素执行相同的操作。非常好,谢谢。我将看看这个,从您的程序中学习。
c[0]=104
c[1]=107
c[2]=110
#include <iostream>
using namespace std;

int main(){

int a[]={101,102,103,104,107,110};
int n = sizeof(a) / sizeof(int);

int b[]={102,103,101};
int m = sizeof(b) / sizeof(int);

int c[20];
static int k=0;
int flag;

int largestNumInA = 0;
for(int i=0;i<n;i++){

    if(largestNumInA < a[i])
        largestNumInA = a[i];
}

int solutionSet[largestNumInA]; // this is our container

for(int j=0;j<n;j++){ // Time Complexity => O(n)

    solutionSet[a[j]] = 1; // flag off the original sample items as 1..
}

for(int k=0;k<m;k++){ // Time Complexity => O(n)

    solutionSet[b[k]] = -1; // flag off the sold items as -1..
}

for(int x=0;x<largestNumInA;x++){ // Time Complexity => O(n)

    if(solutionSet[x] == 1){ // unsold items...
        c[k] = x;
        printf("c[%d]=%d\n",k,x);
        k++;
    }
}
return 0;

}