您的位置:首页 > 编程语言 > C语言/C++

试题“转移罪犯”和最高薪酬

2015-09-14 11:29 549 查看
这是一个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
;

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
;

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;
}
运行结果图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息