一星題
加密
怎么寫(xiě)都只能通過(guò)20%的用例,也不知道是我理解錯(cuò)了,還是速度上不去。
題的大意是:第一行輸入一個(gè)數(shù)字告訴你有多少行字符串需要加密,每行字符串不超過(guò)50個(gè)字符,輸入和輸出的字符串均是小寫(xiě)字母。
#include <string>
using namespace std;
int main()
{
int n;
string s;
int a[50] = { 1,2,4 };
for (unsigned char i = 3; i < 50; i++)
{
a[i] = a[i - 1] + a[i - 2] + a[i - 3];
a[i] = a[i]%24;
}
cin >> n;
while (n--)
{
cin >> s;
for (size_t i = 0; i < s.size(); i++)
{
s[i] += a[i]%24;
if (s[i] > 'z')
{
s[i] = s[i] - 'z' + 'a' - 1;
}
}
cout << s << endl;
}
return 0;
}
終點(diǎn)可達(dá)
原題大意是:一串?dāng)?shù)字,從第一個(gè)開(kāi)始走,需要幾步能夠達(dá)到最后一個(gè)數(shù),返回步數(shù),或者是不能達(dá)到,返回-1;第一步的步長(zhǎng)最大為
len/2,后面每一步的步長(zhǎng)都是它當(dāng)前所在位置的數(shù)字的大小。
我搞不定輸入輸出,也沒(méi)做出來(lái)。胡亂寫(xiě)的如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int find(vector<int> &vn, int goal, int maxFirst);
int findMin(vector<int> &vn);
int main()
{
int n;
int goal(0);
int ret(-1);
int maxFirst;
vector<int> vn;
while (cin>>n)
{
vn.push_back(n);
}
goal = vn.size() - 1;
maxFirst = vn.size() / 2;
ret = find(vn, goal, maxFirst);
cout << ret<<endl;
return 0;
}
int find(vector<int> &vn, int goal, int maxFirst)
{
int ret(-1);
vector<int> vns;
for (int i = goal; i >= 0; i--)
{
if (i == 0)
{
i + maxFirst >= goal;
return 1;
}
else if (i + vn[i] == goal)
{
// 這個(gè)if里面只有單次能成功的,沒(méi)有比較,這樣得不到最優(yōu)的
ret = find(vn, i, maxFirst);
if (ret != -1)
{
vns.push_back(ret + 1);
}
}
}
if (vns.size() == 0)
{
return -1;
}
else
{
return findMin(vns);
}
return 0;
}
int findMin(vector<int> &vn)
{
int ret(0);
for (size_t i = 0; i < vn.size(); i++)
{
ret = min(vn[i], ret);
}
return ret;
}
二星題
密碼排列
原題大意:給你一堆可能的數(shù)字,以及密碼的最少位數(shù),要求你寫(xiě)出所有可能的密碼組合,且不同的組合間按前面位的數(shù)字由小到大輸出,每行只輸出一個(gè)密碼。
我一看,同樣搞不定輸入輸出,直接交白卷了。