#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int a[1005]; int main() { int n; while(~scanf("%d",&n)) {//要后者胜,只要s=0,那么n=(m+1)*r,输出最小的m即可 int len=0; bool flag=0; for(int i=1;i*i<=n;i++)//循环应避免TLE { if(n%i==0) { a[len++]=i; a[len++]=n/i; } } sort(a,a+len); for(int i=0;i<len;i++) { if(a[i]>2) { printf("%d\n",a[i]-1); flag=1; break; } } if(!flag) printf("0\n"); } return 0; }
转载于:https://www.cnblogs.com/atmacmer/p/5244029.html
本文提供了一道C++算法题的解决方案,通过寻找能够使后者获胜的最小整数m,利用数学方法进行优化,避免了超时错误(TLE)的发生。
1万+

被折叠的 条评论
为什么被折叠?



