UVA-11728 Alternate Task
题目大意:给一个数s(s<=1000),让找一个因子和为s的最大数。
题目分析:暴力打表。因为s的取值范围不大,暴力可以。
代码如下:
1 # include<iostream> 2 # include<cstdio> 3 # include<set> 4 # include<cstring> 5 # include<algorithm> 6 using namespace std; 7 int ans[1005]; 8 set<int>s; 9 void init() 10 { 11 set<int>::iterator it; 12 memset(ans,-1,sizeof(ans)); 13 for(int i=1;i<=10000;++i){ 14 s.clear(); 15 for(int j=1;j*j<=i;++j){ 16 if(i%j==0){ 17 s.insert(j); 18 s.insert(i/j); 19 } 20 } 21 int sum=0; 22 for(it=s.begin();it!=s.end();++it) 23 sum+=(*it); 24 if(sum<=1000) 25 ans[sum]=i; 26 } 27 } 28 int main() 29 { 30 init(); 31 int n,cas=0; 32 while(scanf("%d",&n)&&n) 33 printf("Case %d: %d\n",++cas,ans[n]); 34 return 0; 35 }