arrays - 将两个数组相减,但一个会定期重复?
问题描述
我在 C 中遇到了以下数组管理任务,你能帮我吗?以下是我到目前为止编写的代码。
欧空局的天文学家收到了来自世界各地的特殊无线电信号。另一方面,该信号是已知的天然无线电源,它来自中子星的方向,因此这两个信号是混合的。幸运的是,这颗恒星已经被观察了很长时间,所以他们确切地知道它发出什么周期性信号。天文学家应该将中子星的已知周期信号与未知信号区分开来。捕获的信号以及中子星信号被天文学家的数字化机器用于非负整数。转换成一串数字。两个系列之间的区别在于特定无线电信号的数字化版本。编写一个函数,从中子星的已知信号中清除噪声信号。该函数获取三个数组作为参数。前两个是噪声信号和星无线电信号。两者都是非负数序列,由值 -1 关闭(反过来,它不再是系列的一部分,只是关闭它)。噪声信号不短于星号。后者只包含恒星不断重复其无线电信号的一个周期。该函数的第三个参数也是必须生成纯无线电信号的数组。通过从噪声数组的给定元素中减去具有相同序列号的元素来设置。(如果在数组过程中星用完了,我们会根据需要从头开始重复使用它的元素。)清除信号也将只包含非负值(这个不需要单独检查),并且干净的数组也必须以 -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';
}
}
解决方案
我认为一点点模数学就是解决这个重复问题所需要的。考虑一个简单的例子:
#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
。此模式将重复任意次数。
推荐阅读
- machine-learning - 我需要一个生成句子的服务,包括一组单词
- php - PHP - 在保存图像之前检测图像文件大小
- azure - Azure Search 搜索带有图像的文章
- power-automate - 微软流程返回 JSON 格式错误
- php - 我收到如下错误警告:include_once(C:/xampp/htdocs/timetable/header.php):无法打开流:没有这样的文件或目录
- php - 为什么 $id 我的项目在 codeigniter 中的值为 NULL
- laravel-6 - 在 Laravel 中使用用户名在 SMTP 服务器上进行身份验证失败
- python - 如何根据分隔符将单个列表元素拆分为多个元素
- java - Java Regex 用于两个子字符串之间不包含特定子字符串的模式
- dynamics-crm - 在 fetchXml Dynamics CRM 查询中使用条件仅获取具有非数字值的记录