写了几个函数,对自己写测试用例比较方便

#include <cstdio>
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <time.h>
#include <cmath>
using namespace std;
//参数:
//1.是否包含负数
//2.最小值 3.最大值
int getRandInt(int hasNeg, int minv, int maxv)
{
    int ans = minv - 1;
    if(!hasNeg)
    {
        ans = (rand() % (maxv - minv + 1)) + minv;
    }
    else
    {
        int t = 0;
        if(abs(minv) > abs(maxv))
            t = abs(minv);
        else t = abs(maxv);
        while(!(ans <= maxv && ans >= minv))
        {
            ans = rand()%(t + 1);
            if(rand()%2) ans *= -1;
        }
    }
    return ans;
}
//参数
//1.最小长度 2.最大长度
//3.是否使用自定义字符集(字符集优先,例如自定义集中有小写字母a,而参数7选择了否,
//而小写字母a还是会出现, 遵循字符集优先)
//4.自定义字符集
//5.是否包含数字 6.是否包含大学字母 7.是否包含小写字母
char *geetRandStr(int minLen, int maxLen, int useUserSet, char *userset, int hasint, int hasCHAR, int haschar)
{
    int len = (rand() % (maxLen - minLen + 1)) + minLen;
    char *str;
    str = new char[len+1];
    for(int i = 0; i < len; i++)
    {
        while(1)
        {
            int t = rand()%4;
            if(t == 0 && useUserSet)
            {
                int tlen = strlen(userset);
                int p = rand() % tlen;
                str[i] = userset[p];
                break;
            }
            else if(t == 1 && hasint)
            {
                int tlen = 10;
                int p = rand() % tlen;
                str[i] = p + '0';
                break;
            }
            else if(t == 2 && hasCHAR)
            {
                int tlen = 26;
                int p = rand() % tlen;
                str[i] = p + 'A';
                break;
            }
            else if(t == 3 && haschar)
            {
                int tlen = 26;
                int p = rand() % tlen;
                str[i] = p + 'a';
                break;
            }
        }
    }
    str[len] = 0;
    return str;
}
//参数
//1.最小值 2.最大值
double getRandDouble(double minD, double maxD)
{
    double ans = 0;
    double absminD = minD >= 0 ? minD : -minD;
    double absmaxD = maxD >= 0 ? maxD : -maxD;
    double t = absmaxD > absminD ? absmaxD : absminD;
    double r = rand() / 32767.0;
    ans = r * t;
    if(rand()%2) ans *= -1;
    while(ans < minD || ans > maxD)
    {
        r = rand() / 32767.0;
        ans = r * t;
        if(rand()%2) ans *= -1;
    }
    return ans;
}
int main()
{
    freopen("1.in","w",stdout);
    srand(time(NULL));
    int n = 100000, m = 100000;
    printf("%d %d\n", n, m);
    for(int i = 0; i <n; i++)
    {
        printf("%d %d\n", getRandInt(true, -100000000, 100000000),getRandInt(true, -100000000, 100000000));
    }
    for(int i = 0; i < m; i++)
    {
        printf("%d %d\n", getRandInt(false, 0, 1), getRandInt(true, -100000000, 100000000));
    }
    printf("0 0\n");
    return 0;
}

 

你可能感兴趣的文章

评论区

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您好,欢迎到访网站!
  查看权限

«   2018年1月   »
1234567
891011121314
15161718192021
22232425262728
293031

最新留言