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

时间:2017-04-17 00:38:20

标签: 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;
}

1 个答案:

答案 0 :(得分:1)

这是一个诚实的家庭作业问题 StackOverflow建议帮助但不解决 (后来发布了我刚刚测试过的解决方案代码。)

所以这里有一些提示:

  • 总结:我觉得这里的教训应该教会区分数组和值范围,以及索引和这些索引的成员值之间的区别。
  • 涉及多个“范围/数组”
  • 100个随机值的数组
  • 随机值在[0,1000)
  • 范围内
  • [x,x+50]的可重定位范围几乎总是值范围的子范围 (它可能会超过1000)
  • 随机数组成员的值可以在该范围内, 这是一个布尔属性
  • 随机数组的索引是否在范围内是无关紧要的
  • 范围的每个可能位置从随机数组
  • 的成员值开始
  • 所以你有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岁。嗯,无法帮助,在这个宇宙中,叙事的效果并不那么强烈。 (是的,我知道我正在混合两位作者的引用。)