ブルーブリッジカップ公式サイト質問バンク【簡単質問分析】継続的に更新

単語分析

https://www.lanqiao.cn/problems/504/learning/

  • タイトル説明
    小欖は魔法の言語を学んでいます。この言語の単語は小文字の英語で構成されています。一部の単語は非常に長く、通常の英語の単語の長さをはるかに超えています。小欖は長い間学んでいて、いくつかの単語を思い出せなかったので、これらの単語を完全に覚えるのではなく、どの文字が最も多く現れたかによって単語を区別することを計画しました。
    さあ、小欖を助けてください。一言言ったら、最も頻繁な手紙とこの手紙が現れる回数を見つけるのを手伝ってください。
  • 入力の説明
    入力行には1つの単語が含まれ、その単語は小文字の英語のみで構成されます。
    すべての評価ケースで、入力ワード長は1000を超えてはなりません。
  • 出力の説明
    2行を出力します。最初の行には、単語に最も頻繁に出現する文字を示す英語の文字が含まれています。同じ回数出現する文字が複数ある場合は、辞書式順序が最も小さい文字が出力されます。
    2行目には、最も頻繁に使用される文字が単語に出現する回数を表す整数が含まれています。
  • サンプルの入力と出力
示例 1
输入
lanqiao
输出
a
2

示例 2
输入
longlonglongistoolong
输出
o
6

問題分析:ハッシュアドレス指定方法を使用します。つまり、配列の添え字に対応する統計の数

#include <iostream>
# include <bits/stdc++.h>
using namespace std;
int c[26];
int main()
{
    
    
  string a;
  cin>>a;int max=0;
  int i;int b=97;char x;
  for(i=0;i<a.length();++i)
  {
    
    
    ++c[a[i]-97];
  }
  for(i=0;i<26;++i)
  {
    
    
    if(c[i]>max){
    
    
      max=c[i];
      x=i+97;
    }
  }
  cout<<x<<endl<<max<<endl;
  return 0;
}

愚かな子供

https://www.lanqiao.cn/problems/527/learning/

  • タイトルの説明
    愚かな猿は語彙が非常に少ないので、英語の多肢選択式の質問をするたびに頭痛がします。しかし、彼は方法を見つけました、そして実験はオプションを選ぶためにこの方法を使うとき、正しいオプションを選ぶ可能性が非常に高いことを証明しました!
    このメソッドの具体的な説明は次のとおりです。maxnmaxnが単語内で最も出現回数が多い文字の出現回数であり、minnminnが単語内での出現回数が最も少ない文字の出現回数であるとします(maxn-minnmaxn−の場合)。 minnは素数で、ダムモンキーはこれがラッキーワードだと思います。そのような単語はおそらく正解です。
  • 説明を
    入力する小文字のみが表示される可能性があり、長さが100未満の単語である行を入力します。
  • 出力の説明
    2行を出力します。最初の行は文字列で、入力ワードがラッキーワードの場合は文字列です。それ以外の場合はラッキーワードを出力します。それ以外の場合は無回答を出力します
    。2行目は整数です。入力ワードがラッキーワードの場合は、maxnを出力します。 minnmaxn-minnの値。それ以外の場合は0が出力されます。
  • サンプルの入力と出力
示例 1
输入
error
copy
输出
Lucky Word
2

示例 2
输入
Olympic
copy
输出
No Answer
0

この質問の分析:
1。各文字の数を数えます(ハッシュアドレス指定方法、つまり、数える配列の添え字を使用します)
2。最も頻度の高いものと最も頻度の低いものを見つけ
ます3.素数の判断

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
char str[105];
int a[27]={
    
    0};
int main()
{
    
    
  // 请在此输入您的代码
  gets(str);
  int max=-1;
  int min=1000;
  int number=0;
  int i,j;
  int flag=0;
  for(i=0;i<strlen(str);i++)
  {
    
    
      if(str[i]>='a')
      {
    
    
         a[str[i]-'a']++;
      }
  }
  for(i=0;i<26;i++)
  {
    
    
     if(a[i]>max)
      max=a[i];
    if(a[i]<min&&a[i]>0)
      min=a[i];
  }
  number=max-min;
  for(i=2;i<sqrt(number);i++)
  {
    
    
      if(number%i==0)//不是质数
      {
    
    
        flag=1;//用来标志不是质数
        break;
      }
  }
  if(number==0||number==1)//排除一些特殊的情况
  {
    
    
    printf("No Answer\n0");
    return 0;
  }
  if(!flag)
  {
    
    
      printf("Lucky Word\n");
  }
  else
  {
    
    
     printf("No Answer\n0");
     return 0;
  }
  printf("%d\n",number);
  return 0;
}

おすすめ

転載: blog.csdn.net/qq_46527915/article/details/114777403