題目大意:
給定一組數字,判斷該數n能否由形如ab+ba的表達式得來
解法:
找出這組數字中的最大值N,找1-N之間所有的滿足條件的數字存到集合,最後判斷數組中的數是否在該集合中。
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
typedef long long LL;
LL char2LL(char* str)
{
LL num = 0;
for (int i = 0; str[i]; i++)
{
num = num * 10 + str[i] - '0';
}
return num;
}
LL rev(LL x)
{
LL num = 0;
while (x)
{
num = num * 10 + x % 10;
x /= 10;
}
return num;
}
int is_special(char* input1[], int input2)
{
int ans = 0;
LL maxn = 0;
vector<LL> nums(input2);
for (int i = 0; i < input2; i++)
{
nums[i] = char2LL(input1[i]);
maxn = max(maxn, nums[i]);
}
set<LL> sp;
for (LL n = 1; n <= maxn; n++)
{
LL r = rev(n);
if (r > maxn)
continue;
if (n + r > maxn)
continue;
sp.insert(n + r);
}
for (int i = 0; i < input2; i++)
{
if (sp.find(nums[i]) != sp.end())
ans++;
}
return ans;
}
int main()
{
char* input1[5] = { "22","121","12","3","4" };
int input2 = 5;
int ans = is_special(input1, input2);
cout << ans << endl;
return 0;
}
題目解析:
給定一個字符串數組,找出該數組中有幾個獨特字符串,若一個字符串能由另一個字符串奇數位置上的相互字母交換或偶數位置上的字母相互交換得來則這兩個字符串屬於同一個獨特字符串。
解法:分別統計每個字符串偶數位和奇數位上的字母個數,若某兩個字符串偶數位和奇數位上的字符數字均相同則是同一個獨特字符串。
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
void addNum(vector<int>& num, char c)
{
num[c - 'a']++;
}
int distinctPasswords(int input1, char* input2[])
{
int ans = 0;
vector<vector<int> > num1s, num2s;
for (int i = 0; i < input1; i++)
{
vector<int> num1(26,0), num2(26,0);
//統計第i個字符串奇數位上字母個數在數組nums1、偶數位上字母個數在數組nums2
for (int j = 0; input2[i][j]; j++)
{
char c = input2[i][j];
if (j % 2 == 1)
addNum(num1, c);
else
addNum(num2, c);
}
bool has = false; //是否已經有獨特字符串
//判斷是否已經有該字符串的獨特字符串
for (int k = 0; k < num1s.size(); k++)
{
bool eq = true;
for (int j = 0; j < 26; j++)
if (num1s[k][j] != num1[j])
{
eq = false;
break;
}
for (int j = 0; j < 26; j++)
if (num2s[k][j] != num2[j])
{
eq = false;
break;
}
if (eq)
{
has = true;
break;
}
}
//存儲字符串i的字母統計
if (has == false)
{
ans++;
num1s.push_back(num1);
num2s.push_back(num2);
}
}
return ans;
}
int main()
{
int input1 = 2;
char* input2[2] = { "abcd", "cdab" };
int ans = distinctPasswords(input1, input2);
cout << ans << endl;
return 0;
}
第二題