2015年北理复试上机
1、有3个字母a,b,c,输入一个数字,要求输出所有的组合字符和组合数
输入:1 输出:a,b,c 3
输入:2 输出:aa,ab,ac,ba,bb,bc,ca,cb,cc 9
每个位置都是独立的,输入的数字其实是规定了位数n,组合数就是3^n。
将位数向前拱转化为两个vector互相倒,每一次都将一个vector的串取出加上abc之后倒到另一个vector里面。
vector clear():清空vector中的元素
#include<iostream> #include<string> #include<vector> #include<cmath> using namespace std; int main() { int n; cin >> n; string a[3] = { "a","b","c" }; vector<string> v1; vector<string> v2; v1.push_back(a[0]); v1.push_back(a[1]); v1.push_back(a[2]); for (int i = 1; i < n; i++) { if (i % 2 == 1)//v1->v2 { v2.clear(); for (int j = 0; j < v1.size(); j++) { for (int k = 0; k < 3; k++) { string s = v1[j]; s += a[k]; v2.push_back(s); } } } else { v1.clear(); for (int j = 0; j < v2.size(); j++) { for (int k = 0; k < 3; k++) { string s = v2[j]; s += a[k]; v1.push_back(s); } } } } if (n % 2 == 0) { for (int j = 0; j < v2.size(); j++)cout << v2[j] << " "; cout << pow(3, n) << endl; } else { for (int j = 0; j < v1.size(); j++)cout << v1[j] << " "; cout << pow(3, n) << endl; } return 0; }
2、求字符串1与字符串2的最大公共子串的长度及此长度最大公共子串的个数。
输入:abcdefg Eebcdfg (最大公共子串:bcd) 输出:3 1
输入:abcdefg abcddefg (最大公共子串为:abcd defg) 输出:4 2
#include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N = 1005; char s1[N]; char s2[N]; int dp[N][N]; int main() { cin >> s1 >> s2; int l1 = strlen(s1); int l2 = strlen(s2); int ans = 0; int num = 0; memset(dp, 0, sizeof(dp)); for (int i = 1; i <= l1; i++) { for (int j = 1; j <= l2; j++) { if (s1[i - 1] == s2[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1; if (dp[i][j] > ans) { num = 1; ans = dp[i][j]; } else if (dp[i][j] == ans)num++; } } } cout << ans << " " << num << endl; return 0; }

浙公网安备 33010602011771号