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