给定一个由 a-za−z 这 2626 个字符组成的字符串,统计其中哪个字符出现的次数最多。

输入格式
输入包含一行,一个字符串,长度不超过 10001000。

输出格式
输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出 \text{ASCII}ASCII 码最小的那一个字符。

#include<iostream>
#include<string>
using namespace std;
int cnt[26];
int main(){
freopen("cnt.in","r",stdin);
freopen("cnt.out","w",stdout);
string str;
cin>>str;
for(int i=0;i<str.size();i++){
cnt[str[i]-'a']++;
}
int max=0;
int index=0;
for(int i=0;i<26;i++){
if(max<cnt[i]){
max=cnt[i];
index=i;
}
}
cout<<(char)(index+'a')<<" "<<max;
return 0;
}

注意:cnt[26]要定义为全局遍历方初始化为0
接上题:统计字符默许是不区分大小写,最终输出时,以大写为准。

#include<iostream>
#include<string>
using namespace std;
int cnt[26];
int main(){
// freopen("count.in","r",stdin);
// freopen("count.out","w",stdout);
string str;
cin>>str;
for(int i=0;i<str.size();i++){
if(str[i]>='A'&&str[i]<='Z'){
cnt[str[i]-'A']++;
}else{
cnt[str[i]-'a']++;
}

}
int max=0;
int index=0;
for(int i=0;i<26;i++){
if(max<cnt[i]){
max=cnt[i];
index=i;
}
}
cout<<max<<" "<<(char)(index+'A');
return 0;
}

C语言算法设计_ios

三人行必有我师
子曰:“三人行,必有我师”。人越多,可请教的也越多。假设有 nn 个人排成一列,每个人的知识值是一个整数,现在我们想要选取 kk 个连续的人,使得这 kk 个人的知识值之和最大,请你输出这个最大值。
本题我在自己的编译器上通过了,但在网页上却输出错误!

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
long long t[100005];
long long sum[100005];
int main() {
// freopen("teach.in", "r", stdin);
// freopen("teach.out", "w", stdout);
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> t[i];
}
for(int i=1;i<=n;i++) {
sum[i]=sum[i-1]+t[i];
}
int max=0;
int index=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
index=sum[j]-sum[j-k];
if(index>max){
max=index;
}
}
}
cout<<max;
return 0;
}

C语言算法设计_C_02


蒜头君公司一共有 nn 名员工,今天开员工大会,有抽奖环节,不过蒜头君准备使用一种特别的抽奖规则决定奖品的归属。

他让这 nn 名员工每个人写下一个不超过 xx 的正整数,然后选取其中出现了但是出现次数最少的数,如果有多个数出现次数一样,选取数字最大的。

写下这个数的人都会得到奖品,现在告诉你每个人写的数,你来帮蒜头君算一算写下哪个数的人会获奖,有多少人会获奖。

#include <cstdio>
#include <iostream>
using namespace std;
int cnt[1000001]; // 请填上合适的数组大小
int main() {
freopen("bonus.in", "r", stdin);
freopen("bonus.out", "w", stdout);
int n, x;
cin >> n >> x;
for (int i = 0; i < n; i++) {
int num;
cin >> num;
// 这里需要添加内容
if(num<=x&&num>0){
cnt[num]++;
}
}
// 这里需要添加内容
int min=n;
int index=0;
for (int i = 1; i <= x; i++) { // 请完善 if 条件分支部分
if (min>=cnt[i]&&cnt[i]!=0){
min=cnt[i];
index=i;
}
}
// 这里需要添加内容
cout<<index<<" "<<min;
return 0;
}

求根值

#include <cmath>
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for(int a=0;a*a<=n;a++){
for(int b=a;a*a+b*b<=n;b++){
for(int c=b;a*a+b*b+c*c<=n;c++){
if(a*a+b*b+c*c==n){
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
}
}
return 0;
}

贝西喜欢玩桌上扮演游戏(BRPG),所以她说服农场主约翰开车送她到商店,在那里她买了三个骰子。

S个面。每个有 S 面的骰子每一面的点数分别是 1,2,—S-1,S1,2,3,…,S−1,S。

贝西每次同时扔出三个骰子,她一直扔呀扔,试图找出三个骰子点数之和哪个出现的次数最多。

现在给定三个骰子中每个骰子的面数,求三个骰子的点数和哪个最频繁出现。如果有多解,输出最小的一个。

#include <cstdio>
#include <iostream>
using namespace std;
int cnt[100];
int main() {
freopen("dice.in", "r", stdin);
freopen("dice.out", "w", stdout);
int a, b, c;
cin >> a >> b >> c;
for (int i = 1; i <= a; i++) {
for (int j = 1; j <= b; j++) {
for (int k = 1; k <= c; k++) {
//这里需要添加合适的代码
cnt[i+j+k]++;
if(cnt[0]<cnt[i+j+k]){
cnt[0]=cnt[i+j+k];
}
}
}
}
int ans = 1;
for (int i = 1; i<=100/*这里需要添加合适的代码*/; i++) {
if (cnt[i]>cnt[ans]/*这里需要添加合适的代码*/) {
ans = i;
}
}
cout << ans << endl;
return 0;
}

12321,123321123321 都有一个共同的特征,就是无论从左到右读还是从右向左读,都是相同的。这样的数叫做 回文数。

现在要从 55 位或 66 位的十进制整数中找出各个数位之和等于 nn 的回文数。

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
freopen("palindrome.in", "r", stdin);
freopen("palindrome.out", "w", stdout);
int n;
cin >> n;
int a,b,c,d,e,f;
bool m=false;
for(int i=10000;i<=99999;i++){
a=i/10000;
b=(i%10000)/1000;
c=(i%1000)/100;
d=(i%100)/10;
e=i%10;
if(a==e&&b==d&&a+b+c+d+e==n) {
cout<<i<<endl;
m=true;
}
}
for(int i=100000;i<=999999;i++){
a=i/100000;
b=(i%100000)/10000;
c=(i%10000)/1000;
d=(i%1000)/100;
e=(i%100)/10;
f=(i%10);
if(a==f&&b==e&&c==d&&a+b+c+d+e+f==n) {
cout<<i<<endl;
m=true;
}
}
if(!m){
cout<<"-1"<<endl;
}
return 0;
}