c++找出同时出现的次数最多的两个字母

img

【问题描述】最近超市要准备促销活动,为增加销量,超市决定将两种商品进行捆绑销售。现在需要你在已有的购物清单中找出来哪两种商品同时出现的次数最多。
【输入形式】第一行输入一个数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;
}

代码中

  • 首先定义了一个变量n,用于表示现有购物清单的数量
  • 然后定义了一个二维数组a,用于存储每两种商品出现的次数
  • 接着通过while循环,依次读入并统计每个客户购买的商品的次数
  • 最后通过两重循环遍历二维数组a,找出出现次数最多的两种商品,并输出。

#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;
}