这里是链接:2018校招编程题汇总
第1道:小易喜欢的数列
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e5+5;
const int mod = 1000000007;
#define ll  long long int
ll map[11][maxn];
int main()
{
    int n,k;
    ll sum,a;
    while(cin>>n>>k)
    {
        for(int i=1;i<=k;++i)
        {
            map[1][i]=1;
        }
        for(int i=2;i<=n;++i)
        {
            sum=0;
            for(int j=1;j<=k;++j)
            {
                sum=(sum+map[i-1][j])%mod;
            }
            for(int j=1;j<=k;++j)
            {
                a=0;
                int p=j;
                for(int m=2;m*p<=k;++m)
                {
                    a=(a+map[i-1][m*p])%mod;
                }
                map[i][j]=(sum-a+mod)%mod;
            }
        }
        ll ans=0;
        for(int i=1;i<=k;++i)
        {
            ans+=map[n][i];
            ans%=mod;
        }
        /*
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=k;++j)
            {
                cout<<map[i][j]<<" ";
            }
            cout<<endl;
        }
        cout<<endl;
        */
        cout<<ans<<endl;
    }
    return 0;
}
第2道:循环数比较
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    string num1,num2;
    int a1,a2,flag;
    while(cin>>num1>>a1>>num2>>a2)
    {
        int len1,len2;
        len1=num1.length()*a1;
        len2=num2.length()*a2;
        if(len1<len2)
        {
            cout<<"Less"<<endl;
            continue;
        }else if(len1>len2) 
        {
            cout<<"Greater"<<endl;
            continue;
        }else {
            int p1=0,p2=0;
            for(int i=0;i<len1;++i)
            {
                int a1=num1.length();
                int a2=num2.length();
                if(p1==a1){  p1=0; }
                if(p2==a2){  p2=0; }
                if(num1[p1]<num2[p2])
                {
                    flag=-1;
                    break;
                }
                else if(num1[p1]>num2[p2])
                {
                    flag=1;
                    break;
                }else 
                {
                    p1++,p2++;
                }
            }
        }
        if(flag==-1)
        {
            cout<<"Less"<<endl;
        }else if(flag==1)
        {
            cout<<"Greater"<<endl;
        }else cout<<"Equal"<<endl;
    }
    return 0;
}
第3道:DNA序列
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<set>
using namespace std;
const int maxn = 2e3+5;
string str;
int power(int a,int b)
{
    int ans=1;
    for(;b;b>>=1)
    {
        if(b&1) ans=(long long)ans*a;
        a=(long long)a*a;
    }
    return ans;
}
int main()
{
    while(cin>>str)
    {
        int len = str.length();
        for(int i=1;i<=len;++i)
        {
            set<string> m;
            int j;
            for(j=0;i+j<=len;++j)
            {
                m.insert(str.substr(j,i));
            }
            if(m.size()<power(4,i))
            {
                //cout<<m.size()<<"   !!!"<<endl;
                cout<<i<<endl;
                break;
            }
        }
    }
    return 0;
}
第4道:判断题
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n,t,a,ans;
    while(cin>>n>>t>>a)
    {
        if(t<=a)
        {
            ans=t+n-a;
        }else 
        {
            ans=a+n-t;
        }
        cout<<ans<<endl;
    }
    return 0;
}
第5道:删除重复字符
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
    string s1;
    char hash_1[256];
    while(cin>>s1)
    {
        memset(hash_1,0,sizeof(hash_1));
        int len=s1.length();
        for(int i=0;i<len;++i)
        {
            if(!hash_1[s1[i]])
            {
                hash_1[s1[i]]=1;
                printf("%c",s1[i]);
            }
        }
        cout<<endl;
    }
    return 0;
}
第6道:空中旅行
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 1e3+5;
int f[maxn];
int main()
{
    int n,s;
    while(cin>>n>>s)
    {
        for(int i=0;i<n;++i)
        {
            scanf("%d",&f[i]);
        }
        int sum=0,i=0;
        for(;i<n;i)
        {
            sum+=f[i++];
            if(sum>s) break;
        }
        if(i!=n) cout<<i-1<<endl;
        else cout<<i<<endl;
    }
    return 0;
}
第7道:回文素数
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 1e3+5;
int vis[maxn];
void is_prime()
{
    memset(vis,1,sizeof(vis));
    vis[1]=0;
    for(int i=2;i<maxn;++i)
    {
        if(!vis[i]) continue;
        for(int j=2;j*i<maxn;++j)
        {
            vis[i*j]=0;
        }
    }
}
void is_rev()
{
    int s[5];
    int top;
    is_prime();

    for(int i=1;i<maxn;++i)
    {
        if(vis[i])
        {
            top=0;
            int num=i;
            while(num)
            {
                s[top++]=num%10;
                num/=10;
            }
            int flag=0;
            for(int i=0;i<top/2;++i)
            {
                if(s[i]!=s[top-i-1])
                {
                    flag=1;
                    break;
                }
            }
            if(flag)
            {
                vis[i]=0;
            }
        }
    }
}
int main()
{
    int l,r;
    is_rev();
    while(cin>>l>>r)
    {
        int cnt=0;
        for(int i=l;i<=r;++i)
        {
            if(vis[i])cnt++;
        }
        cout<<cnt<<endl;
    }
    return 0;
}
第8道:排序
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e5+5;
int arr[maxn];
int brr[maxn];
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=0;i<n;++i)
        {
            cin>>arr[i];
            brr[i]=arr[i];
        }
        sort(arr,arr+n);
        int cnt=0;
        for(int i=0;i<n;++i)
        {
            if(arr[i]!=brr[i])
            {
                cnt++;
            }
        }
        cout<<cnt<<endl;
    }
    return 0;
}
第9道:字符串价值
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 26;
int arr[maxn];
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    string s;
    int n;
    while(cin>>s>>n)
    {
        int len = s.length();
        memset(arr,0,sizeof(arr));
        for(int i=0;i<len;++i)
        {
            arr[s[i]-'a']++;
        }
        //sort(arr,arr+26,cmp);
        /*
        for(int i=0;i<26;++i)
        {
            cout<<arr[i]<<" ";
        }
        cout<<endl;
        */
        for(int i=0;i<n;++i)
        {
            sort(arr,arr+26,cmp);
            arr[0]--;
        }
        /*
        for(int i=0;i<26;++i)
        {
            cout<<arr[i]<<" ";
        }
        cout<<endl;
        */
        int ans=0;
        for(int i=0;i<26;++i)
        {
            ans+=arr[i]*arr[i];
        }
        cout<<ans<<endl;
    }
    return 0;
}
第10道:拼凑正方形
#include<iostream>
#include<algorithm>
#define min2(x,y,z,q) min(min(x,y),min(z,q))
using namespace std;
int main()
{
    int a,b,c,d,ans;
    int x,y,z,q;
    while(cin>>a>>b>>c>>d)
    {
        x=abs(a-b)+abs(a-c)+abs(a-d);
        y=abs(b-a)+abs(b-c)+abs(b-d);
        z=abs(c-a)+abs(c-b)+abs(c-d);
        q=abs(d-a)+abs(d-b)+abs(d-c);
        ans=min2(x,y,z,q);
        cout<<ans<<endl;
    }
    return 0;
}
第11道:区间表达
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e2+5;
int num[maxn];
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=0;i<n;++i)
        {
            cin>>num[i];
        }
        int aim=num[0],cnt=1;
        for(int i=1;i<n;++i)
        {
            if(aim+1==num[i])
            {
                aim++;
            }else 
            {
                aim=num[i];
                cnt++;
            }
        }
        cout<<cnt<<endl;
    }
    return 0;
}
第12道:数字游戏
#include<iostream>
#include<algorithm>
using namespace std;
string sortStr(string s,int len)
{
    for(int i=0;i<len;++i)
    {
        for(int j=0;j<len-1-i;++j)
        {
            if(s[j]>s[j+1])
            {
                char temp=s[j];
                s[j]=s[j+1];
                s[j+1]=temp;
            }
        }
    }
    return s;
}
int main()
{
    int n,len,cnt;
    string str;
    string ans;
    //while(cin>>n)
    {
        cin>>n;
        cnt=-1<<30;
        for(int i=0;i<n;++i)
        {
            cin>>str;
            len=str.length();
            for(int i=0;i<len;++i)
            {   
                if(str[i]=='0') len--;
            }
            if(len>cnt)
            {
                int l=str.length();
                cnt=len;
                str=sortStr(str,l);
                ans=str;
            }else if(len==cnt)
            {
                int l=str.length();            
                str=sortStr(str,l);
                //cout<<str<<endl;
                for(int i=0;i<l;++i)
                {
                    if(str[i]>ans[i])
                    {
                        ans=str;
                        break;
                    }else if(str[i]<ans[i])
                    {
                        break;
                    }
                }
            }
        }
        int len=ans.length();
        for(int i=0;i<len;++i)
        {
            if(ans[i]!='0')
            {
                cout<<ans[i];
            }
        }
        cout<<endl;
    }
    return 0;
}
第13道:红和绿
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e2+5;
char ans[maxn];
int main()
{
    string str;
    while(cin>>str)
    {
        int aim=1<<30;
        int len = str.length();
        for(int i=0;i<len;++i) ans[i] = 'G';
        for(int i=-1;i<len;++i)
        {
            if(i!=-1) ans[i]='R';
            int cnt=0;
            for(int i=0;i<len;++i)
            {
                if(ans[i]!=str[i])
                {
                    cnt++;
                }
            }
            aim=min(aim,cnt);
        }
        cout<<aim<<endl;
    }
    return 0;
}
第14道:拼凑三角形
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int a,b,c;
    while(cin>>a>>b>>c)
    {
        if(a+b>c && a+c>b && b+c>a)
        {
            cout<<a+b+c<<endl;
        }else 
        {
            cout<<(a+b+c-max(a,max(b,c)))*2-1<<endl;
        }
    }
    return 0;
}
第15道:循环数比较
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    string num1,num2;
    int a1,a2,flag;
    while(cin>>num1>>a1>>num2>>a2)
    {
        int len1,len2;
        len1=num1.length()*a1;
        len2=num2.length()*a2;
        if(len1<len2)
        {
            cout<<"Less"<<endl;
            continue;
        }else if(len1>len2) 
        {
            cout<<"Greater"<<endl;
            continue;
        }else {
            int p1=0,p2=0;
            for(int i=0;i<len1;++i)
            {
                int a1=num1.length();
                int a2=num2.length();
                if(p1==a1){  p1=0; }
                if(p2==a2){  p2=0; }
                if(num1[p1]<num2[p2])
                {
                    flag=-1;
                    break;
                }
                else if(num1[p1]>num2[p2])
                {
                    flag=1;
                    break;
                }else 
                {
                    p1++,p2++;
                }
            }
        }
        if(flag==-1)
        {
            cout<<"Less"<<endl;
        }else if(flag==1)
        {
            cout<<"Greater"<<endl;
        }else cout<<"Equal"<<endl;
    }
    return 0;
}
第16道:青草游戏
#include<stdio.h>
int main()
{
    int n,num;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&num);
        num=num%5;
        if(num==0 || num==2) printf("yang\n");
        else  printf("niu\n");
    }
    return 0;
}
第17道:无聊的牛牛和羊羊
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
double cs2(double s)
{
    return s*(s-1)/2.0;
}
double ck2(double k)
{
    return k*(k-1)/2.0;
}
double cs_k1(double i)
{
    return i;
}
double cs_k2(double i)
{
    return i*(i-1)/2;
}
double ck1(double k)
{
    return k;
}
int main()
{
    double n,m;
    while(cin>>n>>m)
    {
        double s=n+m;
        double f0=0.0;
        double f1=s/2.0;
        double ans=0.0;
        for(int k=2;k<=m;++k)
        {
            ans=( 1.0 + f1*(cs_k1(s-k)*ck1(k)/cs2(s)) + f0*( ck2(k)/cs2(s) ) ) / (1.0-(cs_k2(s-k)/cs2(s)));
            f0=f1;
            f1=ans;
        }
        if(m==0)
        {
            printf("%.1lf\n",0.0);
        }else if(m==1)
        {
            printf("%.1lf\n",s/2.0);
        }else 
        {
            printf("%.1lf\n",ans);
        }
    }
    return 0;
} 
第18道:幸运子序列
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
const int maxn = 1e5+5;
int arr[maxn];
int main()
{
    int n;    
    while(cin>>n)
    {
        stack<int> s;
        for(int i=0;i<n;++i)
        {
            cin>>arr[i];
        }
        int ans=-1<<30;
        for(int i=0;i<n;++i)
        {
            if(s.empty())
            {
                s.push(arr[i]);
                continue;    
            }    
            while(!s.empty()&&s.top()<=arr[i])
            {
                ans=max(ans,s.top()^arr[i]);
                s.pop();
            }
            
            if(!s.empty() && s.top()>=arr[i])
            {
                ans=max(ans,s.top()^arr[i]);
                s.push(arr[i]);
            }else 
            {
                s.push(arr[i]);
                //continue;    
            }            
        }
        cout<<ans<<endl;
    }
    return 0;
}


第19道:缺失的括号
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
int main()
{
    string str;
    while(cin>>str)
    {
        stack<char> s;
        int len = str.length();
        for(int i=0;i<len;++i)
        {
            if(s.empty())
            {
                s.push(str[i]);
                continue;
            }
            if(s.top()=='(' && str[i]=='(')
            {
                s.push(str[i]);
            }else if(s.top()=='(' && str[i]==')')
            {
                s.pop();
            }else if(s.top()==')')
            {
                s.push(str[i]);
            }
        }
        int ans=0;
        while(!s.empty())
        {
            s.pop();
            ans++;        
        }
        cout<<ans<<endl;
    }
    return 0;
}
第20道:最后一位
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long int
ll maxn = 1e18+5;
ll bsearch(ll left,ll ri,ll num);
ll judge(ll i,ll num);
int main()
{
    ll num;
    while(cin>>num)
    {
        if(bsearch(0,maxn,num)==-2)
        {
            cout<<"-1"<<endl;
        }else cout<<bsearch(0,maxn,num)<<endl;        
    }
    return 0;
}
ll bsearch(ll left,ll ri,ll num)
{
    while (left <= ri)
    {
        ll mid = (left + ri)/2;
        //cout<<mid<<"mid值"<<endl;
        if(judge(mid,num)==-1) left = mid+1;
        else if(judge(mid,num)==1)
        {
            ri=mid-1;
        }else 
        {
            return mid;        
        }
    }
    return -2;
}
ll judge(ll i,ll num)        //i 为检验的值,num 为 
{
    ll a=i;
    ll b=a;
    while(a)
    {
        a/=10;
        b+=a;        
    }
    //cout<<b<<endl;
    if(b>num)
    {
        return 1;
    }else if(b==num)
    {
        return 0;
    }else {
        return -1;
    }
    return 0;
}




第21道:冒泡排序
在这里插入代码片
第22道:括号匹配深度
#include<iostream>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxnn = 1e2+5;
char str[maxnn];
int main()
{
    while(~scanf("%s",str))
    {
        stack<char> s; 
        int len=strlen(str);
        int maxn=1,ans=1;
        s.push(str[0]);
        for(int i=1;i<len;++i)
        {
            if(s.empty())
            {
                s.push(str[i]);
                maxn=1;
                continue;
            }
            if(s.top()=='(' && str[i]=='(')
            {
                s.push(str[i]);
                maxn++;
            }else if(s.top()=='(' && str[i]==')')
            {
                s.pop();
                maxn--;
            }
            ans=ans>maxn?ans:maxn;
        }       
        cout<<ans<<endl;
    }
    return 0;
}
第23道:奶牛编号
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long int
const ll mod = 1000000007;
const ll maxn = 1e2+5;
ll arr[maxn];
int main()
{
     int n;
     while(cin>>n)
     {
         for(ll i=0;i<n;++i)
        {
             cin>>arr[i];
        }
        sort(arr,arr+n);    
         ll sub=0;
         ll ans=1;
        for(int i=0;i<n;++i)
         {
             ans=(ans*(arr[i]-sub++))%mod;
        }
        cout<<ans<<endl;
    }
    return 0;
}
Last modification:November 21st, 2019 at 01:44 am
如果觉得我的文章对你有用,请随意赞赏