ubuntu parallels tools进不了图形界面

首先说明一下 环境是Ubuntu 14.04 Parallels Desktop 10
再一次更新Parallels Tools卡死Reset后导致进入图形界面无显示
直接导致本人又耗费时间在Google上..

首先要 ctrl+alt+cmd+f1 进命令行界面
然后在PD里面挂载tools
然后在命令行操作


mount -o exec /dev/cdrom /media/x
cd /media/x
sudo ./install

然后就follow就好了

reference:
CSDN Blog

测试代码运行时间 java


public class Test {
    public static void main(String[] args)
    {
    //  long startTime = System.nanoTime();             // nano sec.
        long startTime = System.currentTimeMillis();    // micro sec.
 
    //  Ur code
         
    //  long estimatedTime = System.nanoTime() - startTime;
        long estimatedTime=System.currentTimeMillis() - startTime;
        System.out.println(estimatedTime);
    }
}

列出购物方法


题:
公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。
程序输入:
第一行是一个整数m,代表可购买的商品的种类数。
接下来是m个整数,每个1行,分别代表这m种商品的单价。
程序输出:
第一行是一个整数,表示共有多少种方案
第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。
例如:
输入:
2
200
300
则应输出:
2
2 2
5 0
输入:
2
500
800
则应输出:
1
2 0

源码ShoppingGame.java


import java.util.Scanner;

public class ShoppingGame {
    
    private static String go(int[] a) {
        int[] b = new int[a.length];
        return go(a, b, 0);
    }
    private static String go(int[] a, int[] b, int x) {
        if (x==a.length) {
            int r = 0;
            for (int i=0; i<a.length; i++) {
                r += a[i]*b[i];
            }
            String s = "";
            if (r==1000) {
                for (int i:b) {
                    s += i+" ";
                }
                s += "\n";
            }
            return s;
        }
        String t = "";
        int[] c = b.clone();// Critical
        for (int i=0; a[x]*i<=1000; i++) {
            String tm = go(a, c, x+1);
            if (tm!="") t += tm;
            c[x] += 1;
        }
        return t;
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i=0; i<n; i++) {
            a[i] = sc.nextInt();
        }
        sc.close();
        String s = go(a);
        System.out.println(s.length()/(2*n+1));
        System.out.println(s);
    }
}

加密算法


题:
在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全;如果设置不好记的密码,又担心自己也会忘记;如果写在纸上,担心纸张被别人发现或弄丢了...
这个程序的任务就是把一串拼音字母转换为6位数字(密码)。我们可以使用任何好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序输出6位数字。
变换的过程如下:
第一步. 把字符串6个一组折叠起来,比如wangximing则变为:
wangxi
ming
第二步. 把所有垂直在同一个位置的字符的ASCII码值相加,得出6个数字,如上面的例子,则得出:
228 202 220 206 120 105
第三步. 再把每个数字“缩位”处理:就是把每个位的数字相加,得出的数字如果不是一位数字,就再缩位,直到变成一位数字为止。例如: 228 => 2+2+8=12 => 1+2=3
上面的数字缩位后变为:344836, 这就是程序最终的输出结果!
要求程序从标准输入接收数据,在标准输出上输出结果。
输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行字符串,就是等待变换的字符串。
输出格式为:n行变换后的6位密码。
例如,输入:
5
zhangfeng
wangximing
jiujingfazi
woaibeijingtiananmen
haohaoxuexi

则输出:
772243
344836
297332
716652
875843

源码NameGame.java


import java.util.Scanner;

public class NameGame {

    private static int go(int x) {
        String s;
        while (x>9) {
            s = ""+x;
            x=0;
            for (int i=0; i<s.length(); i++) {
                x += s.charAt(i)-'0';
            }
        }
        return x;
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        String s;
        while ((n--)>0) {
            int[] a = new int[6];
            s = sc.nextLine();
            for (int i=0; i<s.length(); i++) {
                a[i%6] += (int) (s.charAt(i));
            }
            for (int i=0; i<6; i++) {
                System.out.print(go(a[i]));
            }
            System.out.println();
        }
        sc.close();
    }
}

井字棋研究 取卡问题


题:
闲暇时,福尔摩斯和华生玩一个游戏:
在N张卡片上写有N个整数。两人轮流拿走一张卡片。要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数。例如,某次福尔摩斯拿走的卡片上写着数字“6”,则接下来华生可以拿的数字包括:
1,2,3, 6,12,18,24 ....
当轮到某一方拿卡片时,没有满足要求的卡片可选,则该方为输方。
请你利用计算机的优势计算一下,在已知所有卡片上的数字和可选哪些数字的条件下,怎样选择才能保证必胜!
当选多个数字都可以必胜时,输出其中最小的数字。如果无论如何都会输,则输出-1。
输入数据为2行。第一行是若干空格分开的整数(每个整数介于1~50间),表示当前剩余的所有卡片。
第二行也是若干空格分开的整数,表示可以选的数字。当然,第二行的数字必须完全包含在第一行的数字中。
程序则输出必胜的招法!!
例如:
用户输入:
2 3 6
3 6
则程序应该输出:
3
再如:
用户输入:
1 2 2 3 3 4 5
3 4 5
则程序应该输出:
4

源码CardGame.java


import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class CardGame {
    
    @SuppressWarnings({ "rawtypes" })
    private static boolean go(ArrayList t1, ArrayList t2, boolean x) {
        if (t2.isEmpty()) return !x;
        boolean[] t = new boolean[t2.size()];
        for (int i=0; i<t2.size();i++) {
            int s = (int) t2.get(i);
            ArrayList tm = (ArrayList) t1.clone();
            tm.remove(tm.indexOf(s));
            ArrayList<Integer> t3 = new ArrayList<Integer>();
            t3.clear();
            for (int k=0; k<tm.size(); k++) {
                if (s%(int) tm.get(k)==0 || (int) tm.get(k)%s==0) {
                    t3.add((int) tm.get(k));                    
                }
            }
            t[i] = go(tm, t3, !x);
        }
        for (int i=0; i<t.length; i++) {
            if (t[i]==x) return x;
        }
        return !x;
    }

    public static void main(String[] args) {
        
        ArrayList<Integer> s1 = new ArrayList<Integer>();
        ArrayList<Integer> s2 = new ArrayList<Integer>();
        Scanner sc = new Scanner(System.in);
        String a = sc.nextLine();
        String b = sc.nextLine();
        sc.close();
        
        sc = new Scanner(a);
        while (sc.hasNextInt()) {
            s1.add(sc.nextInt());
        }
        sc.close();
        
        sc = new Scanner(b);
        while (sc.hasNextInt()) {
            s2.add(sc.nextInt());
        }
        sc.close();
        Collections.sort(s1);
        Collections.sort(s2);

        ArrayList<Integer> s3 = new ArrayList<Integer>();
        int k = 0;
        for (int i=0; i<s2.size(); i++) {
            s3.clear();
            s3.add(s2.get(i));
            if (go(s1, s3, true)) {
                k = s2.get(i);
                break;
            }
        }
        System.out.println((k==0)? -1: k);
    }
}

博弈树 火柴棒游戏的实现


题:
这是一个纵横火柴棒游戏。如图,在3x4的格子中,游戏的双方轮流放置火柴棒。其规则是:
1. 不能放置在已经放置火柴棒的地方(即只能在空格中放置)。
2. 火柴棒的方向只能是竖直或水平放置。
3. 火柴棒不能与其它格子中的火柴“连通”。所谓连通是指两根火柴棒可以连成一条直线,且中间没有其它不同方向的火柴“阻拦”。
例如:图所示的局面下,可以在C2位置竖直放置(为了方便描述格子位置,图中左、下都添加了标记),但不能水平放置,因为会与A2连通。同样道理,B2,B3,D2此时两种方向都不可以放置。但如果C2竖直放置后,D2就可以水平放置了,因为不再会与A2连通(受到了C2的阻挡)。
4. 游戏双方轮流放置火柴,不可以弃权,也不可以放多根。直到某一方无法继续放置,则该方为负(输的一方)。
游戏开始时可能已经放置了多根火柴。
你的任务是:编写程序,读入初始状态,计算出对自己最有利的放置方法并输出。
如图的局面表示为:
00-1
-000
0100

即用“0”表示空闲位置,用“1”表示竖直放置,用“-”表示水平放置。
【输入、输出格式要求】
用户先输入整数 n(n<100), 表示接下来将输入 n 种初始局面,每种局面占3行(多个局面间没有空白行)。
程序则输出:每种初始局面情况下计算得出的最佳放置法(行号+列号+放置方式)。
例如:用户输入:
2
0111
-000
-000
1111
----
0010

则程序可以输出:

00-
211

不难猜出,输出结果的含义为:
对第一个局面,在第0行第0列水平放置
对第二个局面,在第2行第1列垂直放置
注意:
行号、列号都是从0开始计数的。
对每种局面可能有多个最佳放置方法(解不唯一),只输出一种即可。
例如,对第一个局面,001 也是正解;对第二个局面,201也是正解。

源码MatchGame.java
示例图片

match game pic
match game pic


import java.util.Scanner;

public class MatchGame {

    private static boolean ck(char[][] c, int i, int k) {
        if (c[i][k]=='-') {
            for (int k2=k+1; k2<4; k2++) {
                if (c[i][k2]=='-') {
                    return false;
                }
                else if (c[i][k2]=='1') {
                    return true;
                }
            }
            for (int k2=k-1; k2>=0; k2--) {
                if (c[i][k2]=='-') {
                    return false;
                }
                else if (c[i][k2]=='1') {
                    return true;
                }
            }
        }
        else if (c[i][k]=='1') {
            for (int i2=i+1; i2<3; i2++) {
                if (c[i2][k]=='1') {
                    return false;
                }
                else if (c[i2][k]=='-') {
                    return true;
                }
            }
            for (int i2=i-1; i2>=0; i2--) {
                if (c[i2][k]=='1') {
                    return false;
                }
                else if (c[i2][k]=='-') {
                    return true;
                }
            }
        }
        return true;
    }
    
    private static String xt(char[][] c) {
        String s = "";
        for (int i=0; i<3; i++) {
            for (int k=0; k<4; k++) {
                if (c[i][k]=='0') {
                    c[i][k] = '-';
                    if (ck(c, i, k)) {
                        if (xt(c, false)) s = ""+i+k+"-";
                    }
                    c[i][k] = '1';
                    if (ck(c, i, k)) {
                        if (xt(c, false)) s = ""+i+k+"1";
                    }
                    c[i][k] = '0';// Critical
                }
            }
        }
        return (s=="")? "Bless..": s;
    }
    
    private static boolean xt(char[][] c, boolean x) {
        boolean r = false;
        String s = "";
        for (int i=0; i<3; i++) {
            for (int k=0; k<4; k++) {
                if (c[i][k]=='0') {
                    c[i][k] = '-';
                    if (ck(c, i, k)) {
                        r = true;
                        s += (xt(c, !x))? 1: 0;
                    }
                    c[i][k] = '1';
                    if (ck(c, i, k)) {
                        r = true;
                        s += (xt(c, !x))? 1: 0;
                    }
                    c[i][k] = '0';
                }
            }
        }
        if (!r) return !x;
        if (x) {
            if (s.indexOf("1")!=-1) 
                return true;
            else
                return false;
        }
        else {
            if (s.indexOf("0")!=-1)
                return false;
            else
                return true;
        }
    }
    
    public static void main(String[] args) {
    /*  
        try {
            FileInputStream fis= new FileInputStream("/Users/Tro/Desktop/Trial.txt");
            System.setIn(fis);
        }
        catch(IOException e) {
            e.printStackTrace();
        }
    */  
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        char[][] c = new char[3][4];
        String s;
        while((n--)>0) {
            for (int i=0; i<3; i++) {
                s = sc.nextLine();
                for (int k=0; k<4; k++) {
                    c[i][k] = s.charAt(k);
                }
            }
            System.out.println(xt(c));
        }
        sc.close();
    }
}