#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int p;
int main()
{
string str;
vector<int> n;
cin>>str;
int i = 0;
for(i = 97;i < 123;i++)
{
char a = i;
n.push_back(count(str.begin(),str.end(),a));
}
auto position = max_element(n.begin(),n.end());
for (i = 0; i < 26; i++)
{
if (n[i] == *position)
{
p = i;
break;
}
}
char max_char = p + 97;

printf("%c\n",max_char);
printf("%d\n",*position);
return 0;
}

另一个比我好一点的方法

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
// 请在此输入您的代码
int count[26]={0},max=0,i;
char ch;
while((ch=getchar())!='\n')
count[ch-'a']++;
for(i=1;i<26;i++){
if(count[i]>count[max])
max=i;}
printf("%c\n%d",max+'a',count[max]);
return 0;
}

下面这个题主要是通过加0.5巧妙实现四舍五入

#include <iostream>
using namespace std;
int main()
{
int i;
int n;
int n_jige = 0;
int n_youxiu = 0;
cin>>n;
for(i=0;i<n;i++)
{
int x;
cin>>x;
if(x>=60)
{
n_jige++;
}
if(x>=85)
{
n_youxiu++;
}
}
int a=(n_jige*100.0)/(n*1.0)+0.5;
int b=(n_youxiu*100.0)/(n*1.0)+0.5;
printf("%d%\n%d%\n",a,b);
return 0;
}

最短路径

#include <iostream>
#include <queue>
#include <vector>
using namespace std;
#define inf 987654321
struct edge{ int from, to, dis; };
struct node
{
int ind; // 点的序号
int dis; // 起始点到该点的距离
bool operator < (const node rhs) const {
return dis > rhs.dis;
}
};
vector<edge> edges; // 边集
priority_queue<node> q; // 小顶堆
vector<int> lis[100]; // 邻接表

int dis[100]={0}; // 起始点到所有点的最短距离
int way[100]={0}; // 路径(本题不需要)

void add(char from,char to,int dis)
{
edges.push_back({from-'A',to-'A',dis});
lis[from-'A'].push_back(edges.size()-1);
}
void dijkstra()
{
for(int i=0;i<100;i++)
dis[i]=inf;
dis['A'-'A']=0;
q.push({'A'-'A',0});
while(!q.empty())
{
node x = q.top(); q.pop(); // 距离最小的点出队
int ind = x.ind;
if(x.dis!=dis[ind]) continue; // 曾经出过队
for(int i=0;i<lis[ind].size();i++)
{
edge &e=edges[lis[ind][i]]; // 引用
if(dis[e.to]>dis[ind]+e.dis)
{
dis[e.to]=dis[ind]+e.dis;
way[e.to]=lis[ind][i];
q.push({e.to,dis[e.to]});
}
}
}
}
int main()
{
add('A', 'B', 2);
add('A', 'C', 1);
add('A', 'D', 1);
add('A', 'E', 1);
add('B', 'J', 2);
add('B', 'G', 1);
add('C', 'D', 3);
add('C', 'F', 3);
add('C', 'G', 3);
add('D', 'E', 1);
add('D', 'G', 2);
add('D', 'H', 1);
add('D', 'I', 2);
add('E', 'H', 1);
add('E', 'I', 3);
add('F', 'G', 1);
add('F', 'J', 1);
add('G', 'F', 1);
add('G', 'I', 3);
add('G', 'K', 2);
add('H', 'I', 1);
add('H', 'L', 2);
add('I', 'M', 3);
add('J', 'S', 2);
add('K', 'N', 1);
add('K', 'L', 3);
add('K', 'P', 2);
add('L', 'M', 1);
add('L', 'R', 1);
add('M', 'N', 2);
add('M', 'Q', 1);
add('M', 'S', 1);
add('N', 'P', 1);
add('O', 'P', 1);
add('O', 'Q', 1);
add('O', 'R', 3);
add('R', 'S', 1);
dijkstra();
cout<<dis['S'-'A']<<endl;
return 0;
}

高精度

#include <iostream>
#include <vector>
using namespace std;
// 模拟基本的加法运算过程
vector<int> add(vector<int>& A, vector<int>& B)
{
// 默认A.size()>=B.size()
if (A.size() < B.size()) return add(B, A);
int t = 0;
vector<int> C;
for (int i = 0; i < A.size(); i++)
{
t += A[i];
if (i < B.size()) t += B[i];
C.push_back(t % 10);
t /= 10;
}
if (t) C.push_back(t);
return C;
}

int main()
{
string a, b;
cin >> a >> b;
vector<int> x, y;
// 这里面102497存的是794201,倒着存方便运算
for (int i = a.size() - 1; i >= 0; i--)
{
x.push_back(a[i] - '0');
}
for (int i = b.size() - 1; i >= 0; i--)
{
y.push_back(b[i] - '0');
}
vector<int> ans = add(x, y);
for (int i = ans.size() - 1; i >= 0; i--)
{
cout << ans[i];
}
return 0;
}