【问题描述】最近超市要准备促销活动,为增加销量,超市决定将两种商品进行捆绑销售。现在需要你在已有的购物清单中找出来哪两种商品同时出现的次数最多。
【输入形式】第一行输入一个数N (1<=N<=100) ,表示现有购物清单的数量;随后的N行分别输入每个客户购买的商品(商品数固定为5),商品用大写字母表示。
【输出形式】输出需要捆鄉销售的两个商品。(按照ASCLL码的升序进行排列)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_N = 100;
const int MAX_K = 5;
int n; // Quantity of shopping lists
char items[MAX_N][MAX_K]; // Shopping lists
int counts[26][26]; // Counts of each pair of items
int main()
{
// Read input
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < MAX_K; j++)
cin >> items[i][j];
// Count occurrences of each pair of items
memset(counts, 0, sizeof(counts));
for (int i = 0; i < n; i++)
for (int j = 0; j < MAX_K; j++)
for (int k = j + 1; k < MAX_K; k++)
counts[items[i][j] - 'A'][items[i][k] - 'A']++;
// Find most frequent pair of items
int max_count = 0;
char item1 = 'A', item2 = 'B';
for (int i = 0; i < 26; i++)
for (int j = i + 1; j < 26; j++)
if (counts[i][j] > max_count)
{
max_count = counts[i][j];
item1 = i + 'A';
item2 = j + 'A';
}
// Output result
cout << item1 << item2 << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int n,num[26][26] = {0},maxi,maxj;
char a[6]={0};
cin>>n;
while(n--)
{
cin>>a;
for(int i=0;i<5;i++)
for(int j=i+1;j<5;j++)
num[a[i]-'A'][a[j]-'A']++;
}
maxi=maxj=0;
for(int i=0;i<26;i++)
for(int j=0;j<26;j++)
{
if(num[maxi][maxj] < num[i][j])
{
maxi = i;
maxj = j;
}
}
printf("%c%c",maxi+'A',maxj+'A');
return 0;
}
代码实现和解释如下,望采纳,有问题可以再沟通
#include<bits/stdc++.h>
using namespace std;
int n, ans, a[27][27];
char x, y, z;
int main() {
cin>>n;
while(n--) {
cin>>x>>y>>z;
a[x-'A'][y-'A']++;
a[x-'A'][z-'A']++;
a[y-'A'][z-'A']++;
}
for (int i=0;i<26;i++)
for (int j=i+1;j<26;j++)
if(ans<a[i][j])
ans=a[i][j], x=i+'A', y=j+'A';
printf("%c%c", x, y);
return 0;
}
代码中
#include<iostream>
#include<cstdio>
#include <iomanip>
#include<cmath>
#include<string>
#include<algorithm>
#include<cctype>
using namespace std;
int main()
{
string A;
cin >> A;
char a[27];//存放26个字母 字母顺序作为数组下标方便计数
int a1[27] = { 0 };//计数
int k = 97;//小写字母a的ASCII码值
for (int i = 1; i <= 26; i++)//给字母数组进行赋值
{
a[i] = char(k);//char强制转成字符型
k++;//依次往后加一 字母顺序是连续的
}
for (int j = 0; j < A.size(); j++)
{
for (int i = 1; i <= 26; i++)
{
if (A[j] == a[i])
{
a1[i]++;
}
}
}
int max = a1[1];
int flag = 1;//记录下标 flag 不能等于0!
for (int c = 1; c <= 26; c++)
{
if (a1[c] > max)
{
max = a1[c];
flag = c;
}
if(a1[c]==max)
{
if (c < flag)
{
max = a1[c];
flag = c;
}
}
}
cout << a[flag] << endl;
cout << max;
return 0;
}