void signalclear(int noise[], int star[], int clear[]) {
int i = 0;
int j = 0;
while (clear[i] != -1) {
if (star[j] == -1) {
j = 0;
}
if (noise[i] == -1) {
clear[i] = -1;
break;
}
clear[i] = noise[i] - star[j];
i++;
j++;
}
}
它应该从star[]
中减去noise[]
直到命中-1
,star []较短,因此必须从头开始重新启动,直到noise[]
命中{{1 }},然后它将停止。
输入看起来像这样,但是我现在正在使用实验值,您可以在下面看到它们。
-1
现在,它在(noise[])
382 450 402 490 592 652 712 832 422 370 362 450 512 512 512 532 683 694 700
712 789 509 480 540 512 469 450 412 402 422 462 522 -1
(star[])
120 120 140 160 200 260 320 440 160 40 100 120 120 -1
处第一个-1处停止之后就停止了,但是应该重新启动并继续减法,直到其他序列达到-1。
{10,0,20,-1}
答案 0 :(得分:3)
您的代码中有两个问题。
1
开始,而不是0
。“星”号较短,因此必须从头开始重新启动 直到“噪音”达到“ -1”,它就会停止。
您处理不正确。
如果我正确理解了您的问题。下面的代码应该可以实现您所期望的。
void signalclear(int noise[64], int star[64], int clear[64]) {
int i = 0;
int j = 0;
while (i < 64) {
if (star[j] == -1) {
j = 0; //Reset the j to start from the beginning.
}
if (noise[i] == -1) {
clear[i] = -1;
break;
}
clear[i] = noise[i] - star[j];
i++;
j++;
}
}
这就是我从main
打来的电话
void main()
{
int noise[64] = {30,10,40,40,20,30,30,30,-1};
int star[64] = {10,0,20,-1};
int clear [64];
signalclear(noise,star,clear);
int i=0;
for (i=0; i<64 && clear[i-1] != -1; i++)
printf("%d ", clear[i]);
}
输出:20 10 20 30 20 10 20 30 -1