【九度OJ】1038【贪心】

来源:互联网 发布:电脑软件转移工具 编辑:程序博客网 时间:2024/05/22 01:38

贪心问题,首先考虑到n的范围n≤1,000,000,10!=3628800  9!=362880,只需要考虑0到9的阶乘

从9!开始减,减到最后,若为0,则输出”YES“,否则“NO”。因为n!>0!+1!+......(n-1)!  (9>=n>=0)。另外要特判n为0时,否则会输出错误。

吐槽一句,题里面前面都是没用的话。。。。有用的就那么几句

代码:

package Test1;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.StreamTokenizer;public class Test16_1038 {/** * by qr jobdu 1038 2014-8-12 * @throws IOException  */public static void main(String[] args) throws IOException {//10!=3628800  9!=362880  8!=40320  0--->9StreamTokenizer st=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); //由于n的范围 最多到9! 不能重复,并且可以为0int facres[]=new int[10];facres[0]=1;for(int i=1;i<10;i++)facres[i]=facres[i-1]*i;while((st.nextToken())!=StreamTokenizer.TT_EOF){int n=(int)st.nval;if(n==0)   //do not forget!!!System.out.println("NO");else{for(int i=9;i>=0;i--){if(n>=facres[i])n=n-facres[i];if(n==0)break;}if(n==0)System.out.println("YES");elseSystem.out.println("NO");}}}}


0 0
原创粉丝点击