我正在尝试编写一个程序来检查两个不同大小的数组中的值,并将公共元素添加到第三个数组中。
我使用以下代码:
#include <stdio.h>
int main(void) {
// your code goes here
int A[5], B[8], i, j, s=1;
int* c;
c=(int*)malloc(s*sizeof(int));
for(i=0;i<5;i++)
{scanf("\t %d", &A[i]);}
printf("\n");
for(j=0;j=8;j++)
{scanf("\t %d", &B[j]);}
for(i=0, j=0;i<5,j<8;i++,j++)
{
if(A[i]==B[j])
{
c[i]=A[i];
s++;
printf("\n %d", c[i]);
c=realloc(c, s*sizeof(int));
break;
}
}
return 0;
}
但是当我尝试执行它时,它会给出时间限制已超过的问题。是什么导致了这个问题?对于编译,我使用的是在线编译器ideone。
答案 0 :(得分:1)
以下是可行的代码。
除了for循环中提到的问题之外,对数组c的赋值是错误的。
#include <stdlib.h>
#include <stdio.h>
int main(void) {
int A[5], B[8], i, j, s=1;
int* c;
c=(int*)malloc(s*sizeof(int));
for(i=0;i<5;i++) {scanf("\t %d", &A[i]);}
printf("\n");
for(j=0;j<8;j++) {scanf("\t %d", &B[j]);}
for(i=0;i<5;i++){
for(j=0;j<8;j++){
if(A[i]==B[j]){
c[s-1] = A[i]; // use s-1 as an index
printf("\n %d", c[s-1]);
s++;
c=(int*)realloc(c, s*sizeof(int));
}
}
}
return 0;
}
答案 1 :(得分:0)
#include <stdio.h>
int main(void)
{
int A[5], B[8], C[8];
for (int i = 0; i < 5; i++)
scanf(" %d ", &A[i]);
printf("\n");
for (int i = 0; i < 8; i++)
scanf(" %d ", &B[i]);
int ci = 0;
for (int ai = 0; ai < 5; ai++)
{
for (int bi = 0; bi < 8; bi++)
{
if (A[ai] == B[bi])
{
C[ci] = A[ai];
ci++;
break;
}
}
}
C[ci] = 0;
printf("Common chars: %s\n", C);
return 0;
}
我认为,你想要的关键是嵌套的for循环,它分别遍历每个字符串(A和B),同时寻找匹配的字符。