我试着给我的教授发邮件寻求帮助,但他的帮助不大。
给定一个从 x 开始的大小为 50 的区间 [x,x+50](包括 x 和 x+50),找到放置该区间的位置,使其具有数组中指向的最大元素数它。仅考虑以集合中的数字开始的间隔。我真的坚持这个。
他给了我们随机指针数组,所以这就是他的代码。我已经整理好了。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i, n, temp, j, k, x;
int *info[100];
for (i = 0; i < 100; i++) {
info[i] = (int*)malloc(sizeof(int));
*info[i] = rand() % 1000;
}
for (k = 0; k < 100; k++) {
for (j = k; j < 100; j++) {
if (*info[k] > *info[j]) {
temp = *info[j];
*info[j] = *info[k];
*info[k] = temp;
}
}
}
for (k = 0; k < 100; k++) {
if (*info[k/50] = 1)
printf("%d\n %d\n", *info[k], *info[k] + 50);
break;
}
return 0;
}
最佳答案
这是一道诚实的作业题。
StackOverflow 推荐帮助但不解决
(稍后发布我刚刚测试过的解决方案代码)。
所以这里有一些提示:
- 总结:我觉得这里的类(class)应该教授区分数组和值范围,以及索引和这些索引中成员的值。
- 涉及多个“范围/数组”
- 100 个随机值的数组
- 随机值在
[0,1000)
范围内 [x,x+50]
的可重定位范围几乎总是值范围的子范围
(可能超过 1000)- 随机数组成员的值可以在范围内, 这是一个 bool 属性
- 随机数组的索引是否在范围内是无关紧要的
- 范围的每个可能位置都从随机数组成员的值开始
- 因此您有 100 个可能的位置要检查
- 对它们中的每一个,计算值的数量 (范围内的随机数组成员)
- (对不起,如果这听起来像“哈哈”,但是)我认为排序只会分散你对解决方案的注意力;
至少如果您在开始时跳过优化方案
与
"VRA":=range of possibe values in random array
"." :=position of the value of one member of random array
(only a few examples, instead of 100)
"r" :=possible range,
starting at the value of one member in random array,
ending 50 later
VRA [ . .. . . . ... . . .. . )
0 1k
2 r [ ]
2 r [ ]
1 r [ ]
3 r [ ]
3 r [ ]
4 r [ ]
3 r [ ]
2 r [ ]
1 r [ ]
2 r [ ]
3 r [ ]
2 r [ ]
1 r [ ]
1 r [ ]
请注意,如果您对随机数组进行排序,则点不会改变位置。
在我的例子中(在我的机器上,它是可重复的,因为随机发生器没有种子)答案是 10 次命中,范围从 703 开始,这是排序随机数组的索引 62。对于未排序的数组,结果是一样的,只是在 40。
Offtopic:这让我很失望。如果我们有一个“四十多岁”和一个“二三岁”,那么它当然应该是 42 岁。好吧,没办法,叙事的效果在这个宇宙中并没有那么强。 (是的,我知道我在混用两位作者的引述。)
关于c - 在指针数组中放置一个区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43443628/