这里是链接: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;
}