在 C/C++ 中定义一系列数字

use*_*236 5 c c++ range

有没有办法将一个数字范围划分为某些子范围

即如果我们有范围 1-10

用户输入 1 3 , 4 7 ,7 10 ,我们将范围 1-3 定义为一个范围的一部分,将 4-7 定义为另一个范围,依此类推。例如,如果输入数字 8,我们将得到范围 3 的输出。

正在考虑创建一个数组int arr[10]并作为用户输入 1 3 例如然后 arr[0]=1 和 arr[2]=1 ,然后为 4 7 作为 arr[3]=2 和 arr[6]= 2 . 但是如果我们从 0 到 2,从 3 到 6 循环,这会遗漏中间的数字。在数组超过 10 的更大范围内,这将是低效的。

有人可以帮助我吗?

alk*_*alk 4

定义范围类型:

struct range
{
  int low;
  int high;
}
Run Code Online (Sandbox Code Playgroud)

然后定义一个这样的数组:

struct range ranges[<some size>] = {0};
Run Code Online (Sandbox Code Playgroud)

定义并实现查找最高值high和最低low值的函数:

int lowest(struct range * ranges, int * plowest);
int highest(struct range * ranges, int * phighest);
Run Code Online (Sandbox Code Playgroud)

输入所有范围并将它们存储在ranges.

highest()继续调用lowest()ranges你就得到了外部间隔:

struct range range_outer = {0};

/* code reading ranges. */

if (0 != lowest(ranges, &range_outer.lowest))
  fprintf(stderr, "lowest() failed\n");

if (0 != highest(ranges, &range_outer.highest))
  fprintf(stderr, "highest() failed\n");
Run Code Online (Sandbox Code Playgroud)

为了提供帮助lowest(),对,按前者的成员按后者的成员highest()进行排序可能是有意义的。rangeslowhigh

int sort_by_low(struct ranges * ranges); 
int sort_by_high(struct ranges * ranges); 
Run Code Online (Sandbox Code Playgroud)

使用该函数可以轻松完成对数组的排序qsort()