点击咨询:郑州3+2学校 河南省技校 郑州电脑学校

首页 > 郑州北大青鸟学员作品 >

[Java] java解北大POJ1016:数字记数

时间:2016-01-26 10:26:50 作者:未知 点击: 0
一些Java学习中的常见问题的解答

        给一个数串 例如 :31123314 这个串可以表示成 31123314 (^_^ 还是一样的)它表示上面的那个串中有 3个1,1个2,3个3,一个4;再举一个不同的。5553141 这个串可以表示为 21131435 (2个1,1个3,1个4,3个5),21131435就是5553141的Inventory 数。
 
        对给出的数,求出他的Inventory 数,如果是本身,那么就输出: n is self-inventorying(n 表示所给的数串) 如果不一样那么继续向下变换,还是那5553141 举例吧! 他变成21131435 ,然后可以变成 3112231415,再变就成 3122231415 就这样变下去;如果在某一步中变成了初始串 那就输出:n is self-inventorying after j steps (j 是变了多少步才等于他自己);如果出现在某一步变换中出现了循环那么就输出:n enters an inventory loop of length k(k 是循环的周期)如果变换了15次还没有上面说的情况那么就输出:n can not be classified after 15 iterations   
   程序:
import java.util.*;
import java.io.*;
public class Main{
    
    public static void main(String rgs[]) throws Exception
    {        
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        while(true){
            String s = cin.next();
            if(s.equals("-1"))
                break;
            String[] t = new String[16];//保存s与15个变换结果
            int i;
            t[0]=s;
            for(i=0;i<15;i++){
                t[i+1] = change(t[i]);
                int res = Judge (t,i+1); //判断
                if(res==1 && i==0){
                    System.out.println(s+" is self-inventorying ");
                    break;
                }
                if(res==1){
                    System.out.println(s+" is self-inventorying after "+i+" steps ");
                    break;
                }
                if(res>0){
                    System.out.println(s+" enters an inventory loop of length "+res+" ");
                       break;
                }
            }
            if(i==15)
                System.out.println(s+" can not be classified after 15 iterations ");
        }
    }
    
    //输出s的Inventory 数,输入5553141则输出21131435 
    public static String change(String s){
        int i,n=s.length();
        int[] count=new int[10];
        String t="";
        Arrays.fill(count,0);
        for(i=0;i< n;i++)
            count[s.charAt(i)-'0']++;
        for(i=0;i< 10;i++){
            if(count[i]>0)
                t+=String.valueOf(count[i])+String.valueOf(i);
        }        
        return t;
    }
    
    //第ind次变换结果与前面所有结果比较
    public static int Judge(String[] t,int ind){
        for(int i=0;i< ind;i++){
            if(t[ind].equals(t[i])){
                if(ind==i+1)
                    return 1;
                else 
                    return ind-i;
            }
        }
        return 0;
    }
}
 
运行结果:
C:\poj>java  Main
22
22 is self-inventorying
31123314
31123314 is self-inventorying
314213241519
314213241519 enters an inventory loop of length 2
21221314
21221314 is self-inventorying after 2 steps
111222234459
111222234459 enters an inventory loop of length 2
 

(责任编辑:未知)
zuopin
6张图 弄懂软件开发
学员百分百就业满意

升学案例

数十家优质大学合作

更多了解

就业案例

高端就业,不做普通工

更多了解