求助一个学校的作业问题(问题本身不难,但是加了很多限制条件)

题目总版

布置作业的老师就是傻逼。
by dead_X @ 2021-01-20 08:34:17


@[oisdoaiu](/user/56825) 这个题难度应该比较大,是作业的附加题,到时候过几天有答案了我在看看吧,哎,估计这分我是拿不到了
by Isaachsq @ 2021-01-20 09:07:36


@[dead_X](/user/111055) 感谢感谢!我再思考思考
by Isaachsq @ 2021-01-20 09:08:17


@[dead_X](/user/111055) 老师没说数据范围(~~默认所有数据<100~~),把int前五位和后五位分别当成两个short用(逃
by daiarineko @ 2021-01-22 22:03:43


@[qidirj](/user/371468) 准确地说应该是前 $16$ 位(二进制)
by dead_X @ 2021-01-22 22:07:11


@[dead_X](/user/111055) ~~只是皮一下~~,正常来说老师不会把数据放这么宽的,应该有解
by daiarineko @ 2021-01-22 22:08:18


```cpp #include <cstdio> #include <iostream> using namespace std; int f(int sum,int layer,int maxlayer){//返回值后五位是总和,后五位以外的是pos-neg int ml=maxlayer; if(maxlayer<0)cin>>ml;//数据个数 int n; cin>>n; if(layer==maxlayer)return (n*ml<(sum+n)?-100000:100000)+sum+n+10000000;//避免出现pos-neg过小出现负数 int r=f(sum+n,layer+1,ml); cout<<layer<<" "<<maxlayer<<" "<<n<<" "<<r<<endl; int rr=r%100000; r/=100000;//取两部分,r=pos-neg,rr=所有数总和 r-=100;//注意一定要先除再减,否则亲测会WA if(n*ml<rr/*小于平均,这里采用除变乘的方式避免小数*/){ return rr+(r-1)*100000+10000000; }else if(n*ml>rr){ return rr+(r+1)*100000+10000000; }else{/*题面漏洞,没有考虑某元素等于平均数的情况,自行改变这个分支*/ return rr+r*100000+10000000; } return -1; } int main(){ int r=f(0,1,-1); //r-=10000000; //r%=100000; //cout<<r<<"("<<r-10000000<<")"<<endl; //cout<<r/100000-100<<" and "<<r%100000<<endl; r/=100000; r-=100; if(r>0){ cout<<"positive"; }else if(r<0){ cout<<"negative"; }else{ cout<<"neutral"; } return 0; } ``` 解法已经出来了,不过因为返回值一个当两个,允许的数据范围很小
by daiarineko @ 2021-01-22 22:49:10


上一页 |