http://acm.hdu.edu.cn/showproblem.php?pid=1248 #include<iostream> using namespace std; int flag[]={150,200,350}; bool avi[10001]={false}; int main() { int t,n,i,j,k; for(i=0;i<10001;i+=flag[0]) avi[i]=true; for(i=0;i<10001;i++) { if(avi[i]) //画出每个刚好花完的点 { for(k=i+flag[1];k<10001;k+=flag[1]) avi[k]=true; } } scanf("%d",&t); while(t--) { scanf("%d",&n); if(avi[n]) printf("0/n"); else { for(i=n-1;avi[i]!=true;i--) ; //从后往前第一个满足刚好花完的 printf("%d/n",n-i); } } }