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

题目总版

可以递归的时候读入,递归到头的时候把总和与当前已经判断完的pos-neg差返回,不能用pair的话可以传个取地址啥的,取地址也不算位运算吧...(不知道这有啥意义)
by linfourxu @ 2021-01-20 06:14:27


@[linfourxu](/user/50477) ~~我寻思递归到头也返回不成$pos-neg$啊,还是要回溯的时候算吧。~~
by pl_er @ 2021-01-20 06:24:08


@[linfourxu](/user/50477) 不可以取地址,就是只能用bool跟int这两个数据类型,不能用pointer。我在想可不可以用互递归来做,但是好像也没想出来
by Isaachsq @ 2021-01-20 06:40:33


@[pl_er](/user/315507) 我也觉得,得到头了才能把最后的均值算出来,但是回溯的时候要怎么算我想了好久没想出来
by Isaachsq @ 2021-01-20 06:42:47


@[pl_er](/user/315507) 就是回溯的时候算,然后返回qwq
by linfourxu @ 2021-01-20 07:05:14


怕是一个不可做问题(雾
by oisdoaiu @ 2021-01-20 08:23:30


需要知道的信息为mean和pos-neg,然而只能返回一个值,无法包含两个信息
by oisdoaiu @ 2021-01-20 08:24:15


而且不能用double的话mean还无法用一个int表示
by oisdoaiu @ 2021-01-20 08:24:55


~~好奇老师怎么解决这个问题~~
by oisdoaiu @ 2021-01-20 08:29:30


@[Isaachsq](/user/357161) ``` #include<bits/stdc++.h> using namespace std; inline int read(){ int s=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } pair<int,int> dfs(int n,int cur,int sum) { if(cur==0) { int res=sum/n; if(res*n==sum) return make_pair(res,0); else return make_pair(res-1000000000,0); //res-1000000000 means res<avg<res+1 } int a=read(); sum+=a; pair<int,int> avg=dfs(n,cur-1,sum); if(avg.first>=0) { if(a>avg.first) ++avg.second; else if(a<avg.first) --avg.second; return avg; } else { avg.first+=1000000000; if(a>avg.first) ++avg.second; else if(a<=avg.first) --avg.second; avg.first-=1000000000; return avg; } } signed main() { int n=read(); int ans=dfs(n,n,0).second; if(ans>0) puts("positive"); else if(ans==0) puts("neutral"); else puts("negative"); return 0; } ``` 如果把 ``std::pair<int,int>`` 压成一个 ``int`` 满足要求。 但是很烦……
by dead_X @ 2021-01-20 08:32:32


| 下一页