有没有办法将一个数字范围划分为某些子范围
即如果我们有范围 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 的更大范围内,这将是低效的。
有人可以帮助我吗?
定义范围类型:
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()。
| 归档时间: |
|
| 查看次数: |
27189 次 |
| 最近记录: |