统计字符数

【题目描述】

给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。
【输入】

输入包含一行,一个字符串,长度不超过1000。
【输出】

输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。
【输入样例】

abbccc
【输出样例】

c 3

my code

#include <stdio.h>
#include <string.h>
int main()
{
    char ch[1000];
    int a[1000]={0},max=-1,t;
    scanf("%s",ch);
        for(int i=0;i<strlen(ch);i++)
        {
            a[ch[i]-'a']++;
        }

        for(int i=0;i<26;i++)
        {
                if(a[i]>max)
                {
                    t=i;
                max=a[i];
            }

        }
        printf("%c %d",t+'a',max);
}

A+B高精度加法

#include<iostream>

#include<string>

using namespace std;

int i,a,b,m;

int x[1000];

string c,d;

int main()

{

    cin>>c>>d;

    a=c.length();

    b=d.length();

    m=max(a,b);

    if(a>b)

    {

        for(i=1;i<=a;i++)

        {

            x[i]=c[a-i]-48;

        }

        for(i=1;i<=b;i++)

        {

            x[i]+=d[b-i]-48;

        }

    }

    else

    {

        for(i=1;i<=b;i++)

        {

            x[i]=d[b-i]-48;

        }

        for(i=1;i<=a;i++)

        {

            x[i]+=c[a-i]-48;

        }

 

    }

    for(i=1;i<=m;i++)

    {

        if(x[i]>=10)

        {

            x[i]-=10

            x[i+1]++;

        }

    }

    if(x[m+1]>0)

    {

        m++;

    }

    for(i=m;i>=1;--i)

        {

            cout<<x[i];

        }

 

}

高精度减法

#include<bits/stdc++.h>
using namespace std;
int na[10010],nb[10010],ans[10010];
bool test;
int main()
{
    string a,b;
    cin>>a>>b;
    if((a<b&&a.size()==b.size())||a.size()<b.size())
    {
        swap(a,b);
        test=true;
    }
    for(int i=1;i<=a.size();i++)
    {
        na[i]=a[a.size()-i]-'0';
    }
    for(int i=1;i<=b.size();i++)
    {
        nb[i]=b[b.size()-i]-'0';
    }
    int maxn=max(a.size(),b.size());
    for(int i=1;i<=maxn;i++)
    {
        if(na[i]<nb[i])
        {
            na[i+1]--;
            na[i]+=10;

        }
        ans[i]=na[i]-nb[i];
    }
    while(ans[maxn]==0&&maxn)maxn--;
    if(!maxn) printf("0");
    else{
        if(test==true)cout<<"-";
        for(int i=maxn;i>0;i--) cout<<ans[i];
    }
    return 0;
}

高精度乘法

#include<iostream>
#include<cstring>
using namespace std;
char a1[50001],b1[50001];
int a[50001],b[50001],i,x,len,j,c[50001];
int main ()
{
    cin >>a1 >>b1;//读入两个数
    a[0]=strlen(a1);b[0]=strlen(b1);//计算长度
    for (i=1;i<=a[0];++i)a[i]=a1[a[0]-i]-'0';//将字符串转换成数字
    for (i=1;i<=b[0];++i)b[i]=b1[b[0]-i]-'0';
    for (i=1;i<=a[0];++i)for (j=1;j<=b[0];++j)c[i+j-1]+=a[i]*b[j];//按乘法
    len=a[0]+b[0];                                       //原理进行高精乘
    for (i=1;i<len;++i)if (c[i]>9){c[i+1]+=c[i]/10;c[i]%=10;}//进位
    while (c[len]==0&&len>1)len--;//判断位数
    for (i=len;i>=1;--i)cout <<c[i];//输出
    return 0;
}

一道模拟+排序的题目

111.png

余总给我讲的,余总,永远的神!

#include<bits/stdc++.h>
using namespace std;
struct node{
    int data;
    int van;
    int num;
};
node a[350];
int n,b,c,d,sum;
bool cmp(node i,node j){
    if(i.data>j.data) return 1;
    else if(i.data<j.data) return 0;
    else{
        if(i.van>j.van) return 1;
        else if(i.van<j.van) return 0;
        else{
            if(i.num<j.num) return 1;
            else return 0;
        }
    }
}
int main(){
    scanf("%d",&n);    
    for(int i=1;i<=n;++i){
        scanf("%d %d %d",&b,&c,&d);
        sum=b+c+d;
        a[i].num=i;
        a[i].data=sum;
        a[i].van=b;
    } 
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=5;++i){
        printf("%d %d\n",a[i].num,a[i].data);
    }
    return 0;
}