这是一个xx在线笔试的题目:
1、转移罪犯,题目图片如下图:
最好感觉题目有点问题,没有理解透彻,但是一下是我自己的理解,能够达到测试样例的正确输出,
只是不知道对不对。
这个算法主要是连续扫描,满足的情况计数加一。
代码如下:
#include<iostream>
#include<math.h>
using namespace std;
int main(void)
{
int n,t,c;
double maxn,maxt;
cin>>n>>t>>c;
maxn=2*pow(10.0,5.0);
maxt=pow(10.0,9.0);
if(n<1||n>maxn)
{
cout<<"ERROR N"<<endl;
return ;
}
if(t<1||t>maxt)
{
cout<<"ERROR T"<<endl;
return ;
}
if(c<1||c>n)
{
cout<<"ERROR C"<<endl;
return ;
}
int *a;
a=new int[n];
for(int i=0;i<n;i++)
cin>>a[i];
int k,j,m,count;
count=0;
for(j=0;j<n;j++)
{
k=0;
for(m=j;m<n-1;m++)
{
while(a[m]<=t)
{
k++;
m++;
if(k==c)
{
count++;
break;
}
}
if(a[m]>t)
break;
}
}
cout<<count<<endl;
delete [] a;
return 1;
}
运行结果图:
2、获得最高薪酬
题目没有读懂。
题目如图:
这是我写的代码,调试通过问题。但是考试没来得及提交上去!!!悲剧啦.
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n,m,k;
double max;
cin>>n>>m>>k;
max=pow(10.0,9.0);
int h=m*k;
if(h<1||h>n)
{
cout<<"ERROR (M*K)"<<endl;
return 0;
}
if(n<h||n>5000)
{
cout<<"ERROR N"<<endl;
return 0;
}
int *a;
a=new int[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]<0||a[i]>max)
{
cout<<"ERROR INPUT"<<endl;
return 0;
}
}
int j,t,z,maxget,pos;
maxget=0;
int *maxp;
maxp=new int[k];
for(int p=0;p<k;p++)
maxp[p]=0;
t=0;
pos=0;
for(int p=0;p<k;p++)
{
for(j=0;j<n;j++)
{
for(z=j;z<m+j;z++)
{
t+=a[z];
if(maxp[p]<t)
{
maxp[p]=t;
pos=z;
}
}
t=0;
}
for(int c=pos-m+1;c<=pos;c++)
a[c]=0;
for(int q=0;q<n;q++)
cout<<a[q]<<" ";
cout<<endl;
}
for(int p=0;p<k;p++)
maxget+=maxp[p];
cout<<maxget<<endl;
delete [] maxp;
delete [] a;
return 0;
}
运行结果图: