题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=91
不说这道题怎么难了,我是明明知道算法,但是我用代码实现时真的感觉好困难,特写此博客。 我自己写的代码:
#include<stdio.h> main() { int i,j,s=1,a[15],m,f; for(i=1;i<10;i++) { s=i*s; a[i]=s; } scanf("%d",&f); while(f--){ scanf("%d",&m); int biaoji=10; while(m>0) { for(i=0;i<biaoji;i++) { if(m<a[i]) { biaoji=i-1; break; } if(i==biaoji-1) biaoji=i-1; } biaoji=i-1; m=m-a[i-1]; if(m==0) { printf("Yes\n"); break; } if(biaoji==1) { if(m==0) { printf("Yes\n"); break; } else { printf("No\n"); break; } } } } }
后来看了看别人的代码,再写时:
#include<iostream> using namespace std; int main() { int n; int k[9]={1,2,6,24,120,720,5040,40320,362880}; cin>>n; while(n--) { bool flag=false; int m; cin>>m; for(int i=8;i>=0;i--) { if(m>=k[i] && m>0) m-=k[i]; if(m==0) flag=true; } if(flag) cout<<"Yes"<<endl; else cout<<"No"<<endl; } }
这时才发现自己的代码能力是多么的弱,看来得时加油了