c - 在指针数组中放置一个区间

标签 c arrays pointers

我试着给我的教授发邮件寻求帮助,但他的帮助不大。

给定一个从 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/

相关文章:

c - 如何找到C程序的 "exit"

c++ - 用于主机循环的 CUDA bool 变量

C 程序将整数读入数组然后打印它

java - 如何一致地访问文件?

java - 使用Java将HSQLDB表中的数据转换为二维数组

java - 给定一个数字数组,使用 Map Reduce 返回所有其他数字的乘积数组

c++ - 从数组中读取值有困难

function - 重新分配指针函数参数

pointers - 为什么更改指针的副本不会影响初始对象

使用指针更改结构内的数据