好未来测试题

33 篇文章 0 订阅

题目一:

[编程题] 字符串中找出连续最长的数字串
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:
在一行内输出str中里连续最长的数字串。
输入例子:
abcd12345ed125ss123456789
输出例子:
123456789

#include<iostream>
#include<string.h>
using namespace std;

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;
}

题目二:

[编程题] 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

#include<iostream>
#include<string.h>
using namespace std;

int main()
{
	
	int a[100] = {0};
	int i=0, j=0;
	int num=0;

	while (scanf("%d",&a[num]) != EOF && getchar() != '\n')//录入带空格的数字流。
		num++;

	int n = num+1;
	int k = a[num];

	for(i=0; i<n-2; i++)//升序排序
	{
		for(j=n-2; j>i; j--)//因为升序,所以倒着
		{
			if(a[j-1] > a[j])
			{
				int temp = a[j];
				a[j] = a[j-1];
				a[j-1] = temp;
			}
		}
	}
	
	for(i=0; i<k-1; i++)
	{
		cout << a[i] << ' ';
	}
	cout << a[i] << endl;

	return 0;
}

题目三:

将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    char a[100];
    char b[100];
    int i=0, j=0;
    int n=0;
    int l, r;
    //scanf("%s", a);
    gets(a);
    while(a[i++] != '\0')
        n++;
    i=n-1;
    //printf("%s\n", a);
    
    for(i; i>=0; --i)
    {
        r = i;
        while(a[i] != ' ' && i>=0)
        {
            i--;
        }
        l = i+1;
        int num;
        for(num=l; num <= r; num++)
        {
            b[j++] = a[num];
        }
        b[j++] = ' ';
    }
    b[j-1] = '\0';
    printf("%s\n", b);
    return 0;
}

题目四:

描述:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
	char a[100];
	char b[100];
	char c[100];
	int i=0, j=0, k=0;
	gets(a);
	fflush;
	gets(b);
	//printf("%s\n", a);
	//printf("%s\n", b);
	
	while(a[i] != '\0')
	{
		j=0;
		int flag = 1;
		while(b[j] != '\0')
		{
			if(a[i] == b[j])
			{
				flag=0;
				break;
			}
			j++;
		}
		if(flag==1)//如果a[i]没有在b中,则把a[i]存入c[k]中
			c[k++]=a[i];
		i++;
	}
	c[k]='\0';
	printf("%s\n", c);
	
	return 0;
}
题目五:
描述:输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,

使其和等于 m ,要求将其中所有的可能组合列出来。

思路:

/*

0-1背包问题

1.首先判断,如果n>m,则n中大于m的数不可能参与组合,此时置n = m;
2.将最大数n加入且n == m,则满足条件,输出;
3.将n分两种情况求解:
(1)n没有加入,取n = n - 1; m = m;递归下去;
(2)n加入,取n = n - 1, m = m - n,递归下去。
  */

help1()函数是按照上述思路写的,help()函数则是从1开始取。

#include<iostream>
#include<vector>
using namespace std;
void help(int n, int m, vector<int>& v, int beg) 
{
    if (m == 0)//m==0,说明找到了几个数相加等于m
	{
        for (int i = 0; i<v.size(); i++)
		{
            i == 0 ? cout << v[i] : cout << " " << v[i];
        }
        cout << endl;
    }
    for (int i = beg; i <= n && i <= m; i++)
	{
        v.push_back(i);//取了i
        help(n, m - i, v, i + 1);//从i+1开始查找
        v.pop_back();
    }
}

void help1(int n, int m, vector<int>& v)
{
    if(m==0)
    {
        for(int i=v.size()-1; i>=0; --i)
        {
            i==v.size()-1 ? cout << v[i] : cout << " " << v[i];
        }
        cout << endl;
    }
    

    for(int i=n; i>0; --i)
    {
        v.push_back(i);//取n
        help1(i-1, m-i, v);
        v.pop_back();
    }
}

int main()
{
    int n, m;
    while (cin >> n >> m)
	{
        vector<int> v;
        help(n, m, v, 1);
    }
}


 




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值