用C / C ++定义一系列数字

时间:2014-04-05 15:07:08

标签: 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 as arr [ 3] = 2且arr [6] = 2。但这会错过中间的数字,如果我们从0到2和3到6循环。在数组大于10的更大规模上,这将是低效的。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

定义范围类型:

struct range
{
  int low;
  int high;
}

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

struct range ranges[<some size>] = {0};

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

int lowest(struct range * ranges, int * plowest);
int highest(struct range * ranges, int * phighest);

输入所有范围并将其存储在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");

为了帮助lowest()highest(),对于前者,成员ranges为成员low排序high可能是有意义的。

int sort_by_low(struct ranges * ranges); 
int sort_by_high(struct ranges * ranges); 

使用qsort()函数可以轻松地对数组进行排序。

答案 1 :(得分:0)

完整的工作实施:

#include <iostream>
#include <vector>

using namespace std;

typedef struct
{
    int min; int max; int range;
} RANGE;

int InRange(int num, RANGE range)
{
    if (num >= range.min && num <= range.max)
        return 1;
    return 0;
}

int main()
{
    vector<RANGE> list; int count = 0, rangesCount = 0;
    puts("How many ranges?");
    cin >> rangesCount;
    puts("Input the range defenitions as a min-max-range pairs(Enter min, then enter      max, then enter the output range):");
for (int i = 0; i < rangesCount; i++)
{
    RANGE range;
    cin >> range.min;
    cin >> range.max;
    cin >> range.range;
    list.push_back(range);
}

while (1)
{
    puts("Now, enter a value, to know in what range it exist:");
    int num;
    cin >> num;
    for (int i = 0; i < rangesCount; i++)
    {
        RANGE r = list.at(i);
        int included = InRange(num, r);
        if (included)
        {
            cout << "The output range is " << r.range << "\n\n";
        }
    }
}
}

许多事情都可以改进,您可以根据自己的需要进行定制。