最近超市要准备促销活动,为增加销量,超市决定将两种商品进行捆绑销售。现在需要你在已有的购物清单中找出来哪两种商品同时出现的次数最多
第一行输入一个数N(1<=N<=100),表示现有购物清单的数量;随后的N行分别输入每个客户购买的商品(商品数固定为5),商品用大写字母表示。
输出需要捆绑销售的两个商品。(按照ASCII码的升序进行排列)
最基础的写法(十分麻烦)
int main() {
int abc[10][26][26] = { 0 };
int n;
cin >> n;
char s[10][5];
for (int i = 0; i < n; i++) {
cin >> s[i];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < 5; j++) {
for (int h = 0; h < 26; h++) {
abc[i][(int)(s[i][j] - 'A')][h]++;
}
}
for (int j = 0; j < 5; j++) {
for (int h = 0; h < 26; h++) {
abc[i][h][(int)(s[i][j] - 'A')]++;
}
}
}
int z[26][26] = { 0 };
for (int i = 0; i < 26; i++) {
for (int j = 0; j < 26; j++) {
for (int h = 0; h < n; h++)
{
z[i][j] += abc[h][i][j];
}
}
}
for (int i = 0; i < 26; i++) {
z[i][i] = 0;
}
int maxi=0, maxj=0;
for (int i = 0; i < 26; i++) {
for (int j = 0; j < 26; j++) {
if (z[i][j] > z[maxi][maxj]) {
maxi = i; maxj = j;
}
}
}int temp;
if (maxi > maxj) {
temp = maxi;
maxi = maxj;
maxj = temp;
}
cout << (char)(maxi + 'A') <<(char)( maxj + 'A');
}