好未来2017秋招笔试编程题

1、  [编程题]字符串中找出连续最长的数字串

读入一个字符串str,输出字符串str中的连续最长的数字串

输入描述:

个测试输入包含1个测试用例,一个字符串str,长度不超过255。

输出描述:

在一行内输出str中里连续最长的数字串。

输入例子:

abcd12345ed125ss123456789

输出例子:

123456789

#if 0  ///法1,并输出
///计算输入的字符串中最大的数字串
int main()
{
    int i = 0;
    int num = 0;
    int k = 0;
    int j = 0;
    int Max=0;
    int Max_l=0;
    char str[]="abcd12345ed125ss123456789";
    //char str[255];
    //scanf("%s", str);
    int a[10] = {0};
    int b[10] = {0};
    int c[10] = {0};
    ///首先统计字符串中的数字串的个数
    for(i=0;str[i]!='\0';){
        num=atoi(str+i);
        if(num>0){
           printf("num=%d\n",atoi(str+i));
           c[k]=num;
            while(num>0)
            {
                a[j]= num%10;
                num = num/10;
                j++;
            }
            printf("一共有%d位\n",j);
            i +=j;
            b[k]=j;
            k++;
            j=0;
        }else{
            i++;
        }
    }
    for(i=0;i<k;i++){
        printf("%d\n",b[i]);
        ///找出数组中最大的整数
        if(b[i]>Max){
            Max=b[i];
            Max_l=i;
        }
    }
    printf("(%d,%d,%d)\n",b[Max_l],Max_l,c[Max_l]);
    return 0;
}
#endif // 0

#if 0   ///法2
int main()
{
    int i=0, j;
    int num1=0, num2=0;
    int index1=0, index2=0;
    char str[255];
    char flag=0;
    scanf("%s", str);
    while(str[i] != '\0')
    {
        num2=0;
        while(str[i]>='0' && str[i]<='9')
        {
            num2++;
            index2 = i;
            i++;
        }
        if(num2>num1)
        {
            num1 = num2;
            index1 = index2;
        }
        i++;
    }
    for(j=index1-num1+1; j<=index1; j++)
        cout << str[j];
    cout << endl;
    return 0;
}
#endif // 0

2、

[编程题]n个数里最小的k个

读入一个字符串str,输出字符串str中的连续最长的数字串

输入描述:

每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n

不超过100。

输出描述:

输出n个整数里最小的k个数。升序输出

输入例子:

3 9 6 8 -10 7 -11 19 30 12 23 5

输出例子:

-11 -10 3 6 7

///n个整数中最小的k个整数
#if 0
int main()
{
    int a[100] = {0};
    int num=0;
    int k=3;
    int i=0;
    vector<int> b;
    while (scanf("%d",&a[num]) != EOF && getchar() != '\n')//录入带空格的数字流。
    {
        num++;
    }
    int n = num+1;
    for(i=0;i<n;i++)
        b.push_back(a[i]);

    sort(b.begin(),b.end());
    printf("b= ");
    for(i=0;i<b.size();i++){
        printf("%d ",b[i]);
    }
    printf("\n");
    for(int i=0; i<k; i++)
    {
        cout << b[i] << ' ';
    }
    cout<<endl;
    return 0;
}
#endif
3、

 [编程题]n个数里出现次数大于等于n/2的数

输入n个整数,输出出现次数大于等于数组长度一半的数。

输入描述:

每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。

输出描述:

输出出现次数大于等于n/2的数。

输入例子:

3 9 3 2 5 6 7 3 2 3 3 3

输出例子:

3

///输出出现次数大于等于n/2的数
#if 0
int main()
{
    char str[202];
    int a[101];//存储数字,这里可以进行动态开辟数组
    gets(str);
    int len = strlen(str);
    int i,j=0;
    for(i=len-1;i>=0;) {
        int sum=0;
        int ling = -1;//判断个、十、百...位
        int flag = 0;
        while(str[i]!=' ' && i>=0){
            if(str[i]!='-') {
                ling++;
                sum+=(str[i]-48)*pow(10,ling);
            }
            else{
                flag = 1;
            }
            i--;
        }
        if(flag)
            a[j] = sum*(-1);
        else
            a[j] = sum;
        j++;
        i--;
    }
    for(i=0;i<j;i++)
    {
        int account= 1;
        int number;
        for(int k=i+1;k<j;k++)
        {
            if(a[i]==a[k])
            {
                account++;
                number = a[k];
            }
        }
        if(account>=j/2){
            cout<<number;
            break;
        }
    }
    return 0;
}
#endif



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值