好未来测试题

    xiaoxiao2021-04-15  208

    题目一:

    [编程题] 字符串中找出连续最长的数字串 读入一个字符串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); } }  

    转载请注明原文地址: https://ju.6miu.com/read-670816.html

    最新回复(0)