ZOJ 2679 Old Bill ||ZOJ 2952 Find All M^N Please 两题水题
2679:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1679
2952:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1951
ZOJ:2679先来~
水题大意:(题目大意:我什么时候改名了哇T T)
给你一个5位数的中间三个字母,还有一个数N让你求能被N整除的最大的五位数。
思路:
直接暴力枚举。。。。
#include<cstdio> int num[6]; int main() { int T,n; scanf("%d",&T); while(T--) { scanf("%d",&n); scanf("%d%d%d",&num[2],&num[3],&num[4]); bool ok=false; for(int x=9;x>=1;x--) { num[1]=x; for(int k=9;k>=0;k--) { num[5]=k; int t=1,ans=0; for(int i=5;i>=1;i--,t*=10) ans=ans+ num[i]*t; if(ans % n ==0) { ok=true; printf("%d %d %d\n",x,k,ans/n); goto end; } } } end:; if(!ok) printf("0\n"); } return 0; }
ZOJ : 2952
水题大意:
找出所有小于2^31能被表示为n ^m的数。
思路:
传说中的打表。
用long long 防乘法的时候直接越界了。
#include<cstdio> #include<algorithm> using namespace std; typedef long long LL; const LL N=2147483648; const int MAXN=50000; int len=0; LL ans[MAXN]; int main() { for(LL i=2;i*i<=N;i++) { LL temp=i; while(true) { temp=temp*i; if(temp>=N) break; ans[len++]=temp; } } sort(ans,ans+len); printf("%d\n",ans[0]); for(int i=1;i<len;i++) if(ans[i]!=ans[i-1]) printf("%lld\n",ans[i]); return 0; }
新 blog : www.hrwhisper.me