C程序:一个数组包含项目ID,B数组包含已售出项目查找包含未售出项目的C数组

时间:2016-08-19 06:12:09

标签: 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;

    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;
}

我需要找到包含未售出商品的C数组。

注意:不应使用排序。

我试了几个小时试图找到解决方案,但我无法想出任何简单的事情。如果有人帮忙会很棒。

2 个答案:

答案 0 :(得分:1)

编辑:接受的答案效果很好,但会在二次时间内执行=&gt; O(n ^ 2)将比这个解决方案慢。

您是否考虑过使用pigeonhole principle?它适用于计算像你这样的问题。

  

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

在您的情况下,将数组“a”中的所有项放入容器(数组)中,索引对应于a中的实际数字(使用for循环。操作是=&gt; O(n))。浏览容器数组并标记包含b中项目的所有位置。操作也将是O(n)。最后,第三次浏览容器数组并选择所有未售出的项目。

这是代码(我没有测试它,但我认为它应该运行良好):

#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;

}

答案 1 :(得分:0)

我想你想找到这个:

#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;
}

<强>输出

c[0]=104
c[1]=107
c[2]=110
相关问题