我在C中遇到了下面的数组管理任务,你能帮我吗?下面是我到目前为止所写的代码。
欧空局的天文学家们收到了来自世界各地的特殊无线电信号。另一方面,信号是已知的自然射电源,它来自中子星的方向,所以这两个信号是混合的。幸运的是,这颗恒星已经被观察了很长一段时间,所以他们确切地知道它发出的周期信号是什么。天文学家应该从未知信号中分离出中子星的已知周期信号。捕获的信号以及中子星信号被天文学家的数字化机器用来处理非负整数。转换成一系列的数字。这两个系列之间的区别将是特定无线电信号的数字化版本。写一个从中子星的已知信号中清除噪声信号的函数。该函数获取三个数组作为参数。前两个是噪声信号和星形无线电信号。这两个序列都是非负数序列,由值-1关闭(反过来,值-1不再是序列的一部分,只是关闭它)。不短于星号的噪声信号。后者只包含恒星不断从其无线电信号中重复的一个周期。该函数的第三个参数也是必须生成纯无线电信号的数组。通过从噪声阵列的给定元素中减去具有相同序列号的元素来设置。(如果星形在数组中耗尽,我们将根据需要多次重新使用它的元素。)clear信号还将只包含非负值(这不需要单独检查),并且clean数组也必须用值-1关闭。(长度将与噪波阵列相同。)
#include <stdio.h>
#include <stdlib.h>
void jeltisztitas(int noisy[], int star[], int clean[]) {
int j = 0;
if(j <= 2) {
for (int i = 0; i < sizeof noisy -1 / sizeof noisy[0]; i++, j++) {
A:
clean[i] = noisy[i] - star[j];
if (j >= 3) {
j = 0;
goto A;
}
} int k = sizeof noisy -1;
clean[k] = '\0';
}
}发布于 2021-10-10 19:14:58
我想你只需要一点模数学就可以解决这个问题了。考虑一个简单的例子:
#include <stdio.h>
int main() {
int a[] = {1, 2, 3, 4, 5, 6, 7};
int b[] = {1, 2, 3};
size_t len_a = sizeof(a) / sizeof(a[0]);
size_t len_b = sizeof(b) / sizeof(b[0]);
for (int i = 0; i < len_a; i++) {
size_t i_b = i % len_b;
printf("%d - %d = %d\n", a[i], b[i_b], a[i] - b[i_b]);
}
}输出为:
1 - 1 = 0
2 - 2 = 0
3 - 3 = 0
4 - 1 = 3
5 - 2 = 3
6 - 3 = 3
7 - 1 = 6我们通过获得索引i除以较短数组的长度时的剩余部分来实现这一点。在上面的例子中,b的最大索引是2,所以当索引i达到3时,3 % 3就是0。此模式将重复任意次数。
https://stackoverflow.com/questions/69518112
复制相似问题