三个java超级变态逻辑循环编程题

2023-10-29

1:有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间


import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* <pre>
* <strong>説明.</strong>
* 有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
* 木杆很细,不能同时通过一只蚂蚁。
* 开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
* 当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。
* 假设蚂蚁们每秒钟可以走一厘米的距离。
* 编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。
* </pre>
*
* <pre>
* <strong>注意事項:</strong>
* </pre>
*
* <pre>
* <strong>使用例:</strong>
* </pre>
*/
public class TestDemo29 {

        /** 全局变量:存放所有组合*/
        private static Set<String> set = new HashSet<String>();
        /** 所有方向组合的蚂蚁*/
        private static List<Map> staticList = new ArrayList<Map>();

        /**
         * @param args
         */
        public static void main(String[] args) {

                List<Mayi> mayiList = getInitDat();
                List<String> list = new ArrayList<String>();
                Mayi mayi;
                
                try {
                        // 获得所有蚂蚁的编号
                        for (int i = 0; i < mayiList.size(); i++) {
                                mayi = mayiList.get(i);
                                list.add(mayi.getNo());
                        }
                        
                        // 将蚂蚁编号放入list通过doList方法决定他们的初始方向
                        for (int i = 0; i <= list.size(); i++) {
                                doList(list, i);
                        }

                        String zidx = "";
                        int idx;
                        for (Iterator<String> it = set.iterator(); it.hasNext();) {
                                zidx = it.next();
                                mayiList = getInitDat();
                                char[] ca = zidx.toCharArray();
                                for (char c : ca) {
                                        idx = Integer.parseInt(String.valueOf(c)) - 1;
                                        mayi = mayiList.get(idx);
                                        mayi.setStaFx(1);
                                        mayiList.remove(idx);
                                        mayiList.add(idx, mayi);
                                }
                                staticList.add(doWay(mayiList));
                        }
                        
                        // 做完上面这些我们已经的出每一种方向组合和他们离开木杆所用的时间
                        // 接下来只需要比较他们的时间大小便可
                        Map map = new HashMap();
                        int maxTime = Integer.parseInt(staticList.get(0).get("count").toString());
                        int minTime = maxTime;
                        for (Iterator<Map> it = staticList.iterator(); it.hasNext();) {
                                map = it.next();
                                int nowTime = Integer.parseInt(map.get("count").toString());
                                if (nowTime > maxTime) {
                                        maxTime = nowTime;
                                } else if (minTime > nowTime) {
                                        minTime = nowTime;
                                }
                        }
                        System.out.println(maxTime);
                        System.out.println(minTime);
                        // 上面已经的得到了最小和最大的时间,程序在这里就可以结束了。如果要得到对应的蚂蚁初始状态可以用下面的方法
                        for (Iterator<Map> it = staticList.iterator(); it.hasNext();) {
                                map = it.next();
                                if (maxTime == Integer.parseInt(map.get("count").toString())) {
                                        System.out.println("最大时间:" + maxTime + "。蚂蚁初始状态是:" +map.get("putInitSta").toString());
                                }
                                if (minTime == Integer.parseInt(map.get("count").toString())) {
                                        System.out.println("最小时间:" + minTime + "。蚂蚁初始状态是:" +map.get("putInitSta").toString());
                                }
                        }
                        
                } catch (IndexOutOfBoundsException ioe) {
                        System.out.println("数组越界");
                } catch (Exception e) {
                        e.printStackTrace();
                }

        }

        /**
         * <TT><pRE>
         * <p> 定义一个蚂蚁类. 其中三个参数no:蚂蚁编号、staXy:坐标、staFx:方向.</p>
         * @author wangguanquan
         *</PRE></TT>
         */
        static class Mayi {

                private String no;  // 5只蚂蚁的编号

                private int staXy;  // 当前坐标(距离近点的距离)

                private int staFx = -1;  // 当前方向,设定初始方向为负(朝向近点为负,背向近点为正)

                /**
                 * @return 编号
                 */
                public String getNo() {
                        return no;
                }
                /**
                 * @param 编号 設定する no
                 */
                public void setNo(String no) {
                        this.no = no;
                }
                /**
                 * @return 方向
                 */
                public int getStaFx() {
                        return staFx;
                }
                /**
                 * @param 方向 設定する staFx
                 */
                public void setStaFx(int staFx) {
                        this.staFx = staFx;
                }
                /**
                 * @return 当前坐标
                 */
                public int getStaXy() {
                        return staXy;
                }
                /**
                 * @param 当前坐标 設定する staXy
                 */
                public void setStaXy(int staXy) {
                        this.staXy = staXy;
                }
        }
        
        /**
         * <TT><pRE>
         * <p> 取得5只蚂蚁的初始数据.</p>
         * @return list
         * </PRE></TT>
         */
        protected static List<Mayi> getInitDat() {

                List<Mayi> list = new ArrayList<Mayi>();
                Mayi mayi = new Mayi();
                mayi.setNo("1");
                mayi.setStaXy(3);
                list.add(mayi);

                mayi = new Mayi();
                mayi.setNo("2");
                mayi.setStaXy(7);
                list.add(mayi);

                mayi = new Mayi();
                mayi.setNo("3");
                mayi.setStaXy(11);
                list.add(mayi);

                mayi = new Mayi();
                mayi.setNo("4");
                mayi.setStaXy(17);
                list.add(mayi);

                mayi = new Mayi();
                mayi.setNo("5");
                mayi.setStaXy(23);
                list.add(mayi);

                return list;
        }
        
        /**
         * <TT><pRE>
         * <p> 采用回溯法找出定长度所有可能的组合.</p>
         * @param list 所有蚂蚁
         * @param len 个数
         * @return List 指定个数所有可能的组合
         * @throws Exception 例外
         * </PRE></TT>
         */
        protected static List doList(List list, int len) throws Exception {

                List<String> lst = new ArrayList<String>();
                StringBuffer sb = null;
                int begIdx = 0;
                if (len == 0) {
                        set.add("");
                        return list;
                }
                if (len == 1) {
                        for (Iterator it = list.iterator(); it.hasNext();) {
                                set.add(it.next().toString());
                        }
                        return list;
                }
                while (begIdx < list.size() - len + 1) {
                        sb = new StringBuffer();
                        sb.append(list.get(begIdx));
                        List typeLst = doList(list.subList(begIdx + 1, list.size()), len - 1);
                        for (int i = 0; i < typeLst.size(); i++) {
                                sb.append(typeLst.get(i));
                                lst.add(sb.toString());
                                set.add(sb.toString());
                                sb.delete(1, sb.length());
                        }
                        begIdx++;
                }
                return lst;
        }

        /**
         * <TT><pRE>
         * <p> 根据条件移动木棍上的每一只蚂蚁.并计算移动时间</p>
         * @param Map 返回组合和每种组合所用的时间
         * @throws Exception 例外
         * </PRE></TT>
         */
        protected static Map doWay(List<Mayi> list) throws Exception {

                Map map = new HashMap();
                StringBuffer sb = new StringBuffer();
                int count = 0;
                Mayi mayi = null;
                int staXy;
                for (int i = 0; i < list.size(); i++) {
                        sb.append(list.get(i).staFx);
                        sb.append(", ");
                        sb.append(list.get(i).staXy);
                        sb.append("|");
                }

//                /测试代码,观察蚂蚁的初期情况/
//                System.out.println(sb.toString());
//                System.out.println("<------------" + count +"----------->");
//                //

                map.put("putInitSta", sb.toString());
                List<Mayi> reFxList = reSetFx(list);
                // 无限循环直到所有蚂蚁离开木杆
                while (!win(reFxList)) {
                        
                        for (int i = 0; i < reFxList.size(); i++) {
                                mayi = reFxList.get(i);
                                
                                // 如果蚂蚁走出木棍将不进行移动
                                if (mayi.getStaXy() == 0 || mayi.getStaXy() == 27) {
                                        continue;
                                }
                                // 移动在木棍上的蚂蚁
                                staXy = mayi.getStaXy() + mayi.getStaFx();
                                mayi.setStaXy(staXy);
                                reFxList.remove(i);
                                reFxList.add(i, mayi);
                        }
                        // 同一时间每只蚂蚁都在移动所以count++放在循环外,如果想知道一共移动了多少厘米将count++放在循环体内便可
                        count++;

//                        /测试代码,观察蚂蚁的每一步的移动情况/
//                        for (int i = 0; i < reFxList.size(); i++) {
//                                System.out.println(reFxList.get(i).staFx + "|" + reFxList.get(i).staXy);
//                        }
//                        System.out.println(">------------" + count +"-----------<");
//                        //

                        reFxList = reSetFx(reFxList);
                }

                map.put("count", count);
                return map;
        }

        /**
         * <TT><pRE>
         * <p> 判断所有蚂蚁是否走出木棍.</p>
         * @param list
         * @return
         * </PRE></TT>
         */
        protected static boolean win(List<Mayi> list) {

                Mayi mayi = null;
                for (int i = 0; i < list.size(); i++) {
                        mayi = list.get(i);
                        if (mayi.getStaXy() != 0 && mayi.getStaXy() != 27) {
                                return false;
                        }
                }
                return true;
        }

        /**
         * <TT><pRE>
         * <p> 任意两只蚂蚁碰头时的方向处理.</p>
         * @param list 碰头前的队伍
         * @return list 碰头后的队伍
         * @throws Exception 例外
         * </PRE></TT>
         */
        protected static List<Mayi> reSetFx(List<Mayi> list) throws Exception {
                
                Mayi mayi = null;
                int idx = 0;
                while (idx < list.size() - 1) {
                        mayi = list.get(idx);
                        // 如果蚂蚁走出木棍将不进行调头
                        if (mayi.getStaXy() == 0 || mayi.getStaXy() == 27) {
                                idx++;
                                continue;
                        }
                        int nidx = idx + 1;
                        Mayi mayix = list.get(nidx);
                        // 当任意两只蚂蚁碰头时,两只蚂蚁同时调头朝反方向走。
                        if (mayi.getStaXy() == mayix.getStaXy()) {
                                mayi.setStaFx(mayi.getStaFx() * -1);
                                mayix.setStaFx(mayix.getStaFx() * -1);
                                list.remove(idx);
                                list.add(idx, mayi);
                                list.remove(nidx);
                                list.add(nidx, mayix);
                        }
                        idx++;
                }
                return list;
        }
}


测试结果:
最大时间:24。蚂蚁初始状态是:1, 3|-1, 7|1, 11|1,17|-1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|-1, 7|1, 11|-1,17|1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|-1, 7|-1,11|-1, 17|1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|-1, 7|1, 11|-1,17|-1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|-1, 7|-1, 11|1,17|-1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|1, 7|-1, 11|-1,17|-1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|1, 7|-1, 11|1,17|1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|-1, 7|1, 11|1,17|1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|1, 7|-1, 11|-1,17|1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|-1, 7|-1, 11|1,17|1, 23|
最小时间:11。蚂蚁初始状态是:-1, 3|-1, 7|-1,11|1, 17|1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|1, 7|1, 11|-1,17|-1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|1, 7|-1, 11|1,17|-1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|1, 7|1, 11|1,17|1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|1, 7|1, 11|1,17|-1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|-1, 7|-1,11|-1, 17|-1, 23|
最大时间:24。蚂蚁初始状态是:1, 3|1, 7|1, 11|-1,17|1, 23|

// 1, 3|1, 7|1, 11|-1, 17|1, 23  
可以这么看:第一位是方向,第二位是蚂蚁的初始位置, “|” 各开每一只蚂蚁,假设5只蚂蚁都在X坐标上移动,往正方向移动那么方向为1,相反负方向移动方向为-1


2:参加会议:有人邀请A,B,C,D,E,F6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知:  
  (1).A,B
两人至少有1人参加会议。  
  (2).A,E,F3
人中有2人参加会议。  
  (3).B
C两人一致决定,要么两人都去,要么两人都不去。  
  (4).A,D
两人中只1人参加会议。  
  (5).C,D
两人中也只要1人参加会议。  
  (6).
如果D不去,那么E也决定不去。  
  
那么最后究竟有哪几个人参加了会议呢?

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class TestDemo28 {

        /** 全局变量:存放所有组合*/
        private static Set<String> set = new HashSet<String>();

        /**
         * @param args
         */
        public static void main(String[] args) {

                // 用一个List存放所有参会人员
                List<String> preList = new ArrayList<String>();
                preList.add("A");
                preList.add("B");
                preList.add("C");
                preList.add("D");
                preList.add("E");
                preList.add("F");

                try {
                        // 得到所有的组合
                        for (int i = 1; i <= preList.size(); i++) {
                                doList(preList, i);
                        }
                        // 判断每一种组合是否符合条件
                        for (Iterator<String> it = set.iterator(); it.hasNext();) {
                                marc(it.next().toString());
                        }
                } catch (IndexOutOfBoundsException ioe) {
                        System.out.println("数组越界");
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

        /**
         * <TT><PRE>
         * <p>参加会议:有人邀请A,B,C,D,E,F6个人参加一项会议.</p>
         * @param sb 参数:A,B,C,D,E,F6个人的某种组合
         * @return boolean true:符合条件 false:不符合条件
         *</PRE></TT>
         */
        protected static boolean marc(String sb) {

                // (1).A,B两人至少有1人参加会议。
                if (!sb.contains("A") && !sb.contains("B")) {
                        return false;
                }
                // (2).A,E,F3人中有2人参加会议。
                if (!((sb.contains("A") && sb.contains("E"))
                                || (sb.contains("A") && sb.contains("F"))
                                || (sb.contains("E") && sb.contains("F")))) {
                        return false;
                }
                // (3).B和C两人一致决定,要么两人都去,要么两人都不去。
                if ((sb.contains("B") && !sb.contains("C"))
                                || (!sb.contains("B") && sb.contains("C"))) {
                        return false;
                }
                // (4).A,D两人中只1人参加会议。
                if (sb.contains("A") && sb.contains("D")) {
                        return false;
                }
                // (5).C,D两人中也只要1人参加会议。
                if (sb.contains("C") && sb.contains("D")) {
                        return false;
                }
                // (6).如果D不去,那么E也决定不去。
                if (!sb.contains("D") && sb.contains("E")) {
                        return false;
                }

                // 输出满足条件的组合
                System.out.println(sb);

                return true;
        }

        /**
         * <TT><PRE>
         * <p> 采用回溯法找出制定长度所有可能的组合.</p>
         * @param list 所有候选人
         * @param len 个数
         * @return List 指定人数所有可能的组合
         * @throws Exception 例外
         * </PRE></TT>
         */
        protected static List doList(List list, int len) throws Exception {

                List<String> lst = new ArrayList<String>();
                StringBuffer sb = null;
                int begIdx = 0;
                if (len == 1) {
                        for (Iterator it = list.iterator(); it.hasNext();) {
                                set.add(it.next().toString());
                        }
                        return list;
                }
                while (begIdx < list.size() - len + 1) {
                        sb = new StringBuffer();
                        sb.append(list.get(begIdx));
                        List typeLst = doList(list.subList(begIdx + 1, list.size()), len - 1);
                        for (int i = 0; i < typeLst.size(); i++) {
                                sb.append(typeLst.get(i));
                                lst.add(sb.toString());
                                set.add(sb.toString());
                                sb.delete(1, sb.length());
                        }
                        begIdx++;
                }
                return lst;
        }

 

3:用程序求解:
  
请回答下面10个问题:  
1、第一个答案是b的问题是哪一个?  
  (a2;(b 3;(c4;(d5;(e6  
2、唯一的连续两个具有相同答案的问题是:  
  (a23;(b34;(c45;(d56;(e67  
3、本问题答案和哪一个问题的答案相同?  
  (a1;(b2;(c4;(d7;(e6  
4、答案是a的问题的个数是:  
  (a0;(b1;(c2;(d3;(e4  
5、本问题答案和哪一个问题的答案相同?  
  (a10;(b9;(c8;(d7;(e6  
6、答案是a的问题的个数和答案是什么的问题的个数相同?  
  (ab;(bc;(cd;(de;(e)以上都不是  
7、按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?  
  (a4;(b3;(c2;(d1;(e0 (注:ab相差一个字母)  
8、答案是元音字母的问题的个数是:  
  (a2;(b3;(c4;(d5;(e6 (注:ae是元音字母)  
9、答案是辅音字母的问题的个数是:  
  (a)一个质数;(b)一个阶乘数;(c)一个平方数;(d)一个立方数,(e5的倍数  
10、本问题的答案是:  
  (aa;(bb;(cc;(dd;(ee

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
* @author bree06
* 
*/
public class Demo9 {

    public static final char DEFAULTCHAR = 'a';

    public static final String DEFAULTSTR_A = "a";

    public static final String DEFAULTSTR_B = "b";

    public static final String DEFAULTSTR_E = "e";

    public static List<String[]> list = null;

    private static String allAnswer = null;

    /**
     * @param args
     */
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        init();
        StringBuilder answer = new StringBuilder();
        answer.append("aaaaaaaaaa");
        File file = new File("e:/allanswer.txt");
        FileWriter writer = null;
            try {
                if (!file.exists()) {
                    file.createNewFile();
                }
                writer = new FileWriter(file);
                for (char i = 'a'; i <= 'e'; i++) {
                    answer.deleteCharAt(0);
                    answer.insert(0, i);
                    for (char j = 'a'; j <= 'e'; j++) {
                        answer.deleteCharAt(1);
                        answer.insert(1, j);
                        for (char m = 'a'; m <= 'e'; m++) {
                            answer.deleteCharAt(2);
                            answer.insert(2, m);
                            for (char n = 'a'; n <= 'e'; n++) {
                                answer.deleteCharAt(3);
                                answer.insert(3, n);
                                for (char a = 'a'; a <= 'e'; a++) {
                                    answer.deleteCharAt(4);
                                    answer.insert(4, a);
                                    for (char b = 'a'; b <= 'e'; b++) {
                                        answer.deleteCharAt(5);
                                        answer.insert(5, b);
                                        for (char c = 'a'; c <= 'e'; c++) {
                                            answer.deleteCharAt(6);
                                            answer.insert(6, c);
                                            for (char d = 'a'; d <= 'e'; d++) {
                                                answer.deleteCharAt(7);
                                                answer.insert(7, d);
                                                for (char e = 'a'; e <= 'e'; e++) {
                                                    answer.deleteCharAt(8);
                                                    answer.insert(8, e);
                                                    for (char f = 'a'; f <= 'e'; f++) {
                                                        answer.deleteCharAt(9);
                                                        answer.insert(9, f);
                                                        allAnswer = answer.toString();
                                                        if (matcher()) writer.write(allAnswer + "\n");
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                writer.write("total time: (ms)" + (System.currentTimeMillis() - start));
            } catch (IOException e) {
                try {
                    writer.write(e.getMessage());
                } catch (IOException e1) {}
                e.printStackTrace();
            } finally {
                try {
                    if (writer != null)
                    writer.close();
                } catch (IOException e) {}
            }
    }

    /**
     * 初始化所有问题的答案
     */
    private static void init() {
        list = new ArrayList<String[]>();
        list.add(new String[]{"2", "3", "4", "5", "6"});
        list.add(new String[]{"2,3", "3,4", "4,5", "5,6", "6,7"});
        list.add(new String[]{"1", "2", "4", "7", "6"});
        list.add(new String[]{"0", "1", "2", "3", "4"});
        list.add(new String[]{"10", "9", "8", "7", "6"});
        list.add(new String[]{"b", "c", "d", "e", "a"});
        list.add(new String[]{"4", "3", "2", "1", "0"});
        list.add(new String[]{"2", "3", "4", "5", "6"});
        list.add(new String[]{"a", "b", "c", "d", "e"});
        list.add(new String[]{"a", "b", "c", "d", "e"});
    }

    private static boolean matcher() {
        return (No1() && No2() && No3() && No4() && No5() && No6() && No7() && No8() && No9());
    }

    /**
     * 1、第一个答案是b的问题是哪一个? 
     * @return
     */
    private static boolean No1() {
        return ((allAnswer.indexOf(DEFAULTSTR_B) + 1) == Integer.parseInt(list.get(0)[getThisAns(1)]));
    }

    /**
     * 2、唯一的连续两个具有相同答案的问题是: 
     * @return
     */
    private static boolean No2() {
        int cnt = 0, idx = 0;
        while (idx < allAnswer.length() - 1) {
            if (allAnswer.charAt(idx) == allAnswer.charAt(++idx)) {
                cnt++;
            }
        }
        if (cnt != 1) return Boolean.FALSE;
        String ans = list.get(1)[getThisAns(2)];
        return (allAnswer.charAt(Integer.parseInt(ans.split(",")[0])-1) == allAnswer.charAt(Integer.parseInt(ans.split(",")[1])-1));
    }

    /**
     * 3、本问题答案和哪一个问题的答案相同? 
     * @return
     */
    private static boolean No3() {
        return ((allAnswer.charAt(Integer.parseInt(list.get(2)[getThisAns(3)]) - 1) - DEFAULTCHAR) == getThisAns(3));
    }

    /**
     * 4、答案是a的问题的个数是: 
     * @return
     */
    private static boolean No4() {
        return (Integer.parseInt(list.get(3)[getThisAns(4)]) == contChar(allAnswer, DEFAULTSTR_A));
    }

    /**
     * 5、本问题答案和哪一个问题的答案相同? 
     * @return
     */
    private static boolean No5() {
        return ((allAnswer.charAt(Integer.parseInt(list.get(4)[getThisAns(5)]) - 1) - DEFAULTCHAR) == getThisAns(5));
    }

    /**
     * 6、答案是a的问题的个数和答案是什么的问题的个数相同? 
     * @param thisAns
     * @param allAnswer
     * @return
     */
    private static boolean No6() {
        return (contChar(allAnswer, DEFAULTSTR_A) == contChar(allAnswer, list.get(5)[getThisAns(6)]));
    }

    /**
     * 7、按照字母顺序,本问题的答案和下一个问题的答案相差几个字母? 
     * @return
     */
    private static boolean No7() {
        return (Math.abs(allAnswer.charAt(6)-allAnswer.charAt(7)) == Integer.parseInt(list.get(6)[getThisAns(7)]));
    }

    /**
     * 8、答案是元音字母的问题的个数是: 
     * @return
     */
    private static boolean No8() {
        int cntae = contChar(allAnswer, DEFAULTSTR_A) + contChar(allAnswer, DEFAULTSTR_E);
        return (Integer.parseInt(list.get(7)[getThisAns(8)]) == cntae);
    }

    /**
     * 9、答案是辅音字母的问题的个数是: 
     * (a)一个质数;(b)一个阶乘数;(c)一个平方数;(d)一个立方数,(e)5的倍数;
     * @return
     */
    private static boolean No9() {
        int cntbcd = allAnswer.length() - contChar(allAnswer, DEFAULTSTR_A) - contChar(allAnswer, DEFAULTSTR_E);
        switch (getThisAns(9)) {
        case 0:
            return (String.valueOf(cntbcd).matches("[2357]"));
        case 1:
            return (String.valueOf(cntbcd).matches("[026]"));
        case 2:
            return (String.valueOf(cntbcd).matches("[149]"));
        case 3:
            return (String.valueOf(cntbcd).matches("[18]"));
        case 4:
            return (cntbcd % 5 == 0);
        default:
            return Boolean.FALSE;
        }
    }

    /**
     * 计算字符串中有多少个指定字符
     * @param str
     * @param chr
     * @return
     */
    public static int contChar(String str, String chr) {
        if (str == null || "".equals(str)) return 0;
        return (str.length() - str.replace(chr, "").length());
    }

    /**
     * 取得本题答案
     * @param index 题号
     * @return
     */
    public static int getThisAns(int index) {
        index = index > allAnswer.length() ? allAnswer.length() - 1 : index - 1;
        return allAnswer.charAt(index) - DEFAULTCHAR;
    }

}

// 满足条件的组合有 :
abddaedcba
cdebeeaece
cdebeedcba

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三个java超级变态逻辑循环编程题 的相关文章

  • Java:扩展类并实现具有相同方法的接口

    可能无法完成以下操作 我收到编译错误 继承的方法 A doSomthing int 无法隐藏 B 中的公共抽象方法 public class A int doSomthing int x return x public interface
  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • 如何在java中将数组值排序为循环格式?

    我的数组值如下 String value 1 2 3 4 5 6 7 8 9 10 假设如果我将值 5 传递给 tat 数组 它应该按如下顺序排序 5 6 7 8 9 10 1 2 3 4 怎么办 有人帮忙吗 感谢你 你需要的就是所谓的轮换
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • 如何在 Java 中向时间戳添加/减去时区偏移量?

    我正在使用 JDK 8 并且玩过ZonedDateTime and Timestamp很多 但我仍然无法解决我面临的问题 假设我得到了格式化的Timestamp在格林威治标准时间 UTC 我的服务器位于某处 假设它设置为Asia Calcu
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • 使用 HtmlUnit 定位弹出窗口

    我正在构建一个登录网站并抓取一些数据的程序 登录表单是一个弹出窗口 所以我需要访问这个www betexplorer com网站 在页面的右上角有一个登录链接 写着 登录 我单击该链接 然后出现登录弹出表单 我能够找到顶部的登录链接 但找不
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • Unity 获取虚拟相机的画面

    void Fun Camera m Camera string filePath RenderTexture rt new RenderTexture Screen width Screen height 16 m Camera targe
  • 掌握Python的X篇_20_默认参、字典的展开

    文章目录 1 默认参数 2 指定实参值对应的形参 3 接受任意多个key value方式的参数 4 字典展开为key value键值对的多个参数 1 默认参数 我们可以通过 为形参指定默认值 这样函数调用过程中如果不传对应实参 就会使用默认
  • 最小覆盖圆(smallest enclosing circle)算法 python 实现

    百度一圈没有找到合适的博客 通过外网找到了python实现 所以整理记录一下 最小圆问题 The smallest circle problem also known as minimum covering circle problem b
  • FPGA学习笔记(三) 流水灯入门FPGA设计流程及阻塞/非阻塞赋值的分析

    系列文章目录 一 FPGA学习笔记 一 入门背景 软件及时钟约束 二 FPGA学习笔记 二 Verilog语法初步学习 语法篇1 三 FPGA学习笔记 三 流水灯入门FPGA设计流程 四 FPGA学习笔记 四 通过数码管学习顶层模块和例化的
  • 云计算系列知识点——云计算基础

    系列文章目录 云计算系列知识点 云计算基础 云计算系列知识点 云服务器产品 云计算系列知识点 网络 公网 私网 VPN等 基础知识与计费模式 文章目录 系列文章目录 云计算技术架构 计算虚拟化 KVM 容器技术 数据中心等级分为T1 T4
  • 软件测试策略

    历史的车轮滚滚向前 科技的创新生生不息 大数据 虚拟现实 智能汽车 区块链等为代表的新技术和新应用层出不穷 它们都与软件息息相关 而软件的质量保证离不开软件测试 软件测试要在成本 范围 进度 资源等因素的制约下取得最佳产出 就离不开测试策略
  • 【多字典公共键】快速找到多个字典的公共键及非公共键

    前言 在进行一个项目过程中遇到一个多个URL参数对比与分析的问题 所以就有了这个博客 单纯的了解找到多个字典的公共键的问题 可以移步到 python进阶 python进阶技巧 找到2 5 快速找到多个字典的公共键 想看实操 不妨浏览一下下面
  • keil关于use MicroLIB 和半主机模式的总结

    半主机是这么一种机制 它使得在ARM目标上跑的代码 如果主机电脑运行了调试器 那么该代码可以使用该主机电脑的输入输出设备 这点非常重要 因为开发初期 可能开发者根本不知道该 ARM 器件上有什么输入输出设备 而半主基机制使得你不用知道ARM
  • 虚拟机连接本地数据库

    我们在运行虚拟机上面的项目时 可能要用到本机的数据库 在使用过程中会遇到数据库拒绝访问的情况 这是因为在安装本地数据库时没有启动远程连接 使用两种方法来解决这种问题 一 使用命令行模式 第一步 先切换到MySQL的安装路径下面的bin目录
  • 百分率的sql

    百分比的sql语句 方式一的百分比的sql 说明 这条sql是在一张表里面进行查询 将不同的级别的工程师的百分率查询出来 第一个sql select tmp job grade tmp tcount tmp1 t1count from se
  • 基于单片机的数字频率计设计

    数字频率计概述 数字频率计是计算机 通讯设备 音频视频等科研生产领域不可缺少的测量仪器 它是一种用十进制数字显示被测信号频率的数字测量仪器 它的基本功能是测量正弦信号 方波信号及其他各种单位时间内变化的物理量 在进行模拟 数字电路的设计 安
  • 【力扣】205.同构字符串

    同构字符串 同构字符串 1 题目描述 2 示例 3 代码 方式1 方式2 5 编译结果 同构字符串 1 题目描述 给定两个字符串 s 和 t 判断它们是否是同构的 如果 s 中的字符可以按某种映射关系替换得到 t 那么这两个字符串是同构的
  • 【蓝桥杯Python】2023.2.3-寻找2020

    题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 小蓝有一个数字矩阵 里面只包含数字 00 和 22 小蓝很喜欢 20202020 他想找 到这个数字矩阵中有多少个 20202020 小蓝只关注三种构成 20
  • 2023华为OD机试真题【施肥问题】

    题目描述 思路题解 首先需要计算每个果园的施肥时间 即果园面积除以施肥机能效 然后找到最小的施肥机能效 保证施肥任务能在规定时间内完成 如果施肥天数小于果园数量 则无法完成施肥任务 返回 1 如果施肥天数等于果园数量 则直接返回最大果园面积
  • 编译原理第七章笔记 -- 中间代码生成

    本文中内容整理西安交通大学软件学院吴晓军老师的ppt中 仅供学习使用 请勿转载或他用 参考教材 程序设计语言 编译原理 第3版 陈火旺等 国防工业出版社 这一章分数在35左右 两个大题 数组的引用四元式生成 控制语句当中布尔表达式的翻译 考
  • 运维必学

    欢迎关注 全栈工程师修炼指南 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 专注 企业运维实践 网络安全 系统运维 应用开发 物联网实战 全栈文章 等知识分享 花开堪折直须折 莫待无花空折枝 作者 lt 安全开发运维 gt
  • VS2012编译安装VTK-5.10.1(支持Python)

    1 源码下载 到参考资料 1 下载vtk 5 10 1 zip和vtkdata 5 10 1 zip 2 源码解压 这里以D 盘为例进行说明 在D 盘中创建一个目录VTK 然后在其中创建4个目录 source build data和inst
  • mysql explain详解

    转自 http www blogjava net persister archive 2008 10 27 236813 html 在 explain的帮助下 您就知道什么时候该给表添加索引 以使用索引来查找记录从而让select 运行更快
  • Nginx反向代理与负载均衡

    文章目录 一 网关 代理与反向代理的关系 二 反向代理在系统架构中的应用场景 三 Nginx反向代理配置 1 不重定向配置 2 重定向配置 四 基于反向代理的负载均衡器 不支持https 五 负载均衡介绍 1 负载均衡策略 2 负载均衡调度
  • 三个java超级变态逻辑循环编程题

    1 有一根27厘米的细木杆 在第3厘米 7厘米 11厘米 17厘米 23厘米这五个位置上各有一只蚂蚁 木杆很细 不能同时通过一只蚂蚁 开始时 蚂蚁的头朝左还是朝右是任意的 它们只会朝前走或调头 但不会后退 当任意两只蚂蚁碰头时 两只蚂蚁会同