这道题,因为最后都是均分并且已知。所以可以将其平均算出来后减去,再从左往右循环,如果当前值为0则不用动,如果不为零,则把当前值加到下一个数组元素上,最后都会消除
学习到了!
#include <iostream> #include <cstdio> using namespace std; int n; const int MAXN=110; int a[MAXN]; int main() { int sum=0; int ans=0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } int avg=sum/n; for(int i=0;i<n;i++) { a[i]=a[i]-avg; } for(int i=0;i<n;i++) { if(a[i]==0) continue; a[i+1]=a[i]+a[i+1];//从左往右,不管最后一位是>0,=0,<0,最后都清除干净 ans++; } printf("%d",ans); return 0; }
不用担心最后一位会超出数组,因为所有到最后一位一定会清零。
有一些题设置的真的是很巧妙。