精华内容
下载资源
问答
  • java算法集训代码填空题练习3.pdf
  • java算法集训代码填空题练习2.pdf
  • java算法集训代码填空题练习1.pdf
  • java算法集训代码填空题练习2

    万次阅读 多人点赞 2019-07-23 07:36:17
    注意:请把填空的答案(仅填空处的答案,不包括面)存入考生文件夹下对应题号的“解答.txt”中即可。 直接写在面中不能得分。 import java.math.BigInteger; public class My1 { // 求能除尽1~n 每个数字的...

    1 连续数的公倍数

    为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致。
    但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多。
    事实上,它是1至6的每个数字的倍数。即1,2,3,4,5,6都是可以除尽60。

    我们希望寻找到能除尽1至n的的每个数字的最小整数。

    不要小看这个数字,它可能十分大,比如n=100, 则该数为:
    69720375229712477164533808935312303556800

    为此,有必要使用BigInteger来记录这样的大数。

    请阅读下面的代码,填写缺失的部分(下划线部分)。

    注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
    直接写在题面中不能得分。

    import java.math.BigInteger;
    public class My1
    {
        // 求能除尽1~n 每个数字的最小整数
        public static BigInteger f(int n)
        {
            int[] x = new int[n+1];
            
            for(int i=1; i<=n; i++) x[i] = i;
            
            for(int i=2; i<n; i++)
            {
                for(int j=i+1; j<=n; j++)
                {
                    if(x[j] % x[i]==0) _______________;   // 填空1
                }
            }
            
            BigInteger m = BigInteger.ONE;
            for(int i=2; i<=n; i++)
            {
                m = m.multiply(__________________);   // 填空2
            }
            
            return m;
                
        }
        
        public static void main(String[] args)
        {
            System.out.println(f(30));    
        }
    }
    
    
    x[j] = x[j] / x[i]
    BigInteger.valueOf(x[i])
    

    2 孪生素数

    孪生素数

    所谓孪生素数指的就是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了,就象孪生兄弟一样。最小的孪生素数是 (3, 5),在 100 以内的孪生素数还有 (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61) 和 (71, 73),总计有 8 组。但是随着数字的增大,孪生素数的分布变得越来越稀疏,寻找孪生素数也变得越来越困难。那么会不会在超过某个界限之后就再也不存在孪生素数了呢?
    孪生素数有无穷多对!这个猜想被称为孪生素数猜想,至今没有被严格证明。但借助于计算机我们确实可以找到任意大数范围内的所有孪生素数对。
    下面的代码求出了正整数n以内(不含n)的所有孪生素数对的个数。比如,当n=100的时候,该方法返回8。试补全缺少的代码。

    把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

        public static boolean isPrime(int x)
        {
            for(int i=2; i<=x/2; i++)
            {
                if(x%i==0) _____________;
            }
            return true;
        }
        
        public static int twinPrimeNum(int n)
        {
            int sum = 0;
            for(int i=2; i<n; i++)
            {
                if(isPrime(i) && ___________) sum++;
            }
            
            return sum;
        }
    
    
    return false
    isPrime(i+2) && i + 2 < n
    

    3 迷宫走法

    迷宫问题

    对于走迷宫,人们提出过很多计算机上的解法。深度优先搜索、广度优先搜索是使用最广的方法。生活中,人们更愿意使用“紧贴墙壁,靠右行走”的简单规则。
    下面的代码则采用了另一种不同的解法。它把走迷宫的过程比做“染色过程”。假设入口点被染为红色,它的颜色会“传染”给与它相邻的可走的单元。这个过程不断进行下去,如果最终出口点被染色,则迷宫有解。

    仔细分析代码中的逻辑,填充缺少的部分。

    把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

    public class Maze
    {
        class Cell
        {
            private int row;
            private int col;
            private Cell from;
            
            public Cell(int row, int col, Cell from)
            {
                this.row = row;
                this.col = col;
                this.from = from;
            }
        }
            
        char[][] maze = 
        {{'#','#','#','#','B','#','#','#','#','#','#','#'},
        {'#','#','#','#','.','.','.','.','#','#','#','#'},
        {'#','#','#','#','.','#','#','#','#','.','.','#'},
        {'#','.','.','.','.','#','#','#','#','#','.','#'},
        {'#','.','#','#','#','#','#','.','#','#','.','#'},
        {'#','.','#','#','#','#','#','.','#','#','.','#'},
        {'#','.','#','#','.','.','.','.','.','.','.','#'},
        {'#','.','#','#','.','#','#','#','.','#','.','#'},
        {'#','.','.','.','.','#','#','#','.','#','.','#'},
        {'#','#','.','#','.','#','#','#','.','#','.','A'},
        {'#','#','.','#','#','#','.','.','.','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#','#','#'}};
        
        public void show()
        {
            for(int i=0; i<maze.length; i++)
            {
                for(int j=0; j<maze[i].length; j++) 
    System.out.print(" " + maze[i][j]);
                System.out.println();
            }
        }
        
        //把与from集合中相邻的可染色节点染色,被染色节点记入 dest
        //一旦发现出口将被染色,则返回当前的“传播源”节点
        public Cell colorCell(Set<Cell> from, Set<Cell> dest)
        {
            Iterator<Cell> it = from.iterator();
            while(it.hasNext())
            {
                Cell a = it.next();
                Cell[] c = new Cell[4];
                c[0] = new Cell(a.row-1, a.col, a);
                c[1] = new Cell(a.row, a.col-1, a);
                c[2] = new Cell(a.row+1, a.col, a);
                c[3] = ___________________________;
                            
                for(int i=0; i<4; i++)
                {
                    if(c[i].row < 0 || c[i].row >= maze.length) continue;
                    if(c[i].col < 0 || c[i].col >= maze[0].length) continue;
                    
                    char x = maze[c[i].row][c[i].col];
                    if(x=='B') return a;
                    if(x=='.') 
                    {
                        maze[c[i].row][c[i].col] = '?';
                        ____________________;
                    }
                }
            }
            return null;
        }
        
        public void resolve()
        {
            Set<Cell> set = new HashSet<Cell>();
            set.add(new Cell(9,11,null));
            
            for(;;)
            {
                Set<Cell> set1 = new HashSet<Cell>();
                Cell a = colorCell(set, set1);
                if(a!=null)
                {
                    System.out.println("找到解!");
                    while(a!=null)
                    {
                        maze[a.row][a.col] = '+';
                        ______________;
                    }
                    break;
                }
                if(set1.isEmpty())
                {
                    System.out.println("无解!");
                    break;
                }
                set = set1;
            }        
        }
        
        public static void main(String[] args)
        {
            Maze m = new Maze();
            m.show();
            m.resolve();
            m.show();    
        }
    }
    
    
    new Cell(a.row, a.col+1, a)
    dest.add(c[i])
    a = a.from
    

    4 拍7游戏

    许多人都曾经玩过“拍七”游戏。规则是:大家依次从1开始顺序数数,数到含有7或7的倍数的要拍手或其它规定的方式表示越过(比如:7,14,17等都不能数出),下一人继续数下面的数字。违反规则者受罚。下面的程序模拟这个过程,拍7的情况输出“*”,请完善之。

        for(int i=1; i<100; i++)
        {
            if(i % 7 == 0)
                printf("*\n");
            else if(___________________)
                printf("*\n");    
            else
                printf("%d\n", i);
        }
    
    
    String.valueOf(i).contains("7")
     或者i/10 == 7 || i%10 == 7
    

    5 排列为平方数

    若干不同的数字,排列组合后能产生多少个平方数?
    下面的代码解决了这个问题。
    对于:1,6,9
    排列后,可产生3个平方数:
    169
    196
    961

    请阅读下面的代码,填写缺失的部分(下划线部分)。

    注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
    直接写在题面中不能得分。

    public class My
    {
        public static void f(int[] a, int n)
        {
            if(n==a.length-1)
            {
                int k = 0;
                for(int i=0; i<a.length; i++) k = ____________ + a[i];   // 填空1
                int m = (int)(Math.sqrt(k)+0.5);
                if(m*m==k)
                {
                    System.out.println(k);
                }
                return;
            }
            
            for(int i=n; i<a.length; i++)
            {
                int t = a[n];
                a[n] = a[i];
                a[i] = t;
                
                f(a, _______________);        // 填空2
                
                t = a[n];
                a[n] = a[i];
                a[i] = t;
            }
        }
        
        public static void main(String[] args)
        {
            int[] a = {1,9,6};        
            f(a, 0);
        }
    }
    
    
    k * 10
    n + 1
    

    6 平面点最小距离

    最近距离

    已知平面上的若干点的位置,存入一个List中。现在需要计算所有这些点中,距离最近的两个点间的最小距离。请补全缺失的代码。

    把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

    class MyPoint
    {
        private double x;  // 横坐标
        private double y;  // 纵坐标
            
        public MyPoint(double x, double y)
        {
            this.x = x;
            this.y = y;
        }
        
        public static double distance(MyPoint p1, MyPoint p2)
        {
            double dx = p1.x - p2.x;
            double dy = p1.y - p2.y;        
            return Math.sqrt(dx*dx + dy*dy);
        }
        
        /*
          lst中含有若干个点的坐标
          返回其中距离最小的点的距离
        */
        public static double getMinDistance(List<MyPoint> lst)
        {
            if(lst==null || lst.size()<2) return Double.MAX_VALUE;
            
            double r = Double.MAX_VALUE;
            MyPoint p0 = lst.remove(0);
            for(int i=0; i<lst.size(); i++)
            {
                MyPoint p = lst.get(i);
                double d = MyPoint.distance(p0,p);
                if(d<r) _________;
            }
            
            double d2 = __________________;
            return d2 < r ? d2 : r;
        }
    }
    
    
    r = d
    getMinDistance(lst)
    

    7 扑克牌排列

    下面代码模拟了一套扑克牌(初始排序A~K,共13张)的操作过程。

    操作过程是:
    手里拿着这套扑克牌,从前面拿一张放在后面,再从前面拿一张放桌子上,再从前面拿一张放在后面,…
    如此循环操作,直到剩下最后一张牌也放在桌子上。

    下面代码的目的就是为了求出最后桌上的牌的顺序。

    初始的排列如果是A,2,3…K,则最后桌上的顺序为:
    [2, 4, 6, 8, 10, Q, A, 5, 9, K, 7, 3, J]

    import java.util.*;
    public class A23
    {
        public static List moveCard(List src)
        {
            if(src==null) return null;
            
            List dst = new Vector();
            for(;;)
            {
                if(__________________) break;  // 填空
                src.add(src.remove(0));
                dst.add(__________________);  // 填空
            }
            
            return dst;
        }
        
        public static void main(String[] args)
        {
            List a = new Vector();
            a.addAll(Arrays.asList("A","2","3","4","5","6","7","8","9","10","J","Q","K"));
            System.out.println(moveCard(a));
        }
    }
    
    
    请分析代码逻辑,并推测划线处的代码。
    
    答案写在 “解答.txt” 文件中
    
    注意:只写划线处应该填的内容,划线前后的内容不要抄写。
    
    src.size() == 0
    src.remove(0)
    

    8 三进制转十进制

    不同进制的数值间的转换是软件开发中很可能
    

    会遇到的常规问题。下面的代码演示了如何把键盘输入的3

    进制数字转换为十进制。试完善之。

        BufferedReader br = new BufferedReader
    
    (new InputStreamReader(System.in));
        String s = br.readLine();
        int n = 0;
        for(int i=0; i<s.length(); i++)
        {
            char c = s.charAt(i);
            if(c<'0' || c > '2') throw new 
    
    RuntimeException("Format error");
            n = ______________________;
        }
        System.out.println(n);
    
    
    n = n * 3 + (c - '0')
    

    9 识别复制串

    代码的目标:判断一个串是否为某个基本串的简单复制构成的。

    例如:
    abcabcabc,它由“abc”复制3次构成,则程序输出:abc
    aa 由“a”复制两次构成,则程序输出:a
    axa 不是简单复制构成,则不输出任何信息
    aaxx 也不是仅仅由简单复制构成,不输出信息。

    请阅读下面的代码,填写缺失的部分(下划线部分)。

    注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
    直接写在题面中不能得分。

    public class DaSai
    {
        public static void findRepeat(String x)
        {
            for(int i=1; i<=x.length()/2; i++)
            {
                String base = x.substring(0,i);
                int p = i;
                for(;;)
                {
                    if(p+i>x.length()) break;
                    if(x.substring(p,p+i).equals(base)==false) break;
                    ________________;   // 填空1
                }
                
                if(______________)  // 填空2
                {
                    System.out.println(base);
                    break;
                }
            }
        }
        
        public static void main(String[] args)
        {
            findRepeat("IhaveagoodideaIhaveagoodideaIhaveagoodidea");
        }
    }
    
    p = p + i
    p == x.length()
    

    10 蔬菜价格计算

    计算蔬菜总价

    为了丰富群众菜篮子,平抑菜价,相关部分组织了蔬菜的调运。今某箱中有多个品种的蔬菜。蔬菜的单价(元/公斤)存放在price数组中,蔬菜的重量(公斤)存放在weight数组中。下面的代码计算该箱蔬菜的总价,试完善之。

    把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

        public static double getTotal(double[] price, double[] weight)
        {
            double x = 0;
            for(int i=0; i<price.length; i++)
            {
                ____________________;
            }
            return x;
        }
    
    
    x += price[i] * weight[i]
    
    展开全文
  • java算法集训代码填空题练习3

    万次阅读 多人点赞 2019-07-23 07:40:06
    1 数组转置 编写程序将2行3列的数组行列置换...已经写了如下代码,请完善之: class y{ public static void main(String[] args) throws Exception { int a[][]={{1,2,3},{4,5,6}}; int b[][]=new int[3][2]; ...

    1 数组转置

    编写程序将2行3列的数组行列置换复制给3行2列的数组(即数组的转置)。已经写了如下代码,请完善之:

    class  y{
        public static void main(String[] args) throws Exception {
            int a[][]={{1,2,3},{4,5,6}};
            int b[][]=new int[3][2];
            for(int i=0;i<2;i++){
                for(int j=0;j<3;j++){
                    _____________________;
                }    
            }            
        }
    }
    
    
    b[j][i] = a[i][j]
    

    2 文件管理

    显示“DaSai”目录下以”Ex”开头的文件和目录,写了如下代码,请完善之:

    import java.io.*;
    class JavaFilter implements FilenameFilter{
        String jf;
        JavaFilter(String s){
            jf=s;
        }
        //实现FilenameFilter接口的accept()方法
        public boolean accept(File dir,String name){
            return name.startsWith(jf);//name的前缀是否是参数jf
        }
    }
    public class  Ex{
        public static void main(String[] args) throws Exception {
            File f=new File("/DaSai");
            //过滤以“Ex”开头的文件和目录,存放到字符串数组s中。
            String s[]=____________________________;
            for(int i=0;i<s.length;i++){
                File ff=new File(s[i]);// 根据s[i]创建File类对象
                if(ff.isDirectory())
                    System.out.println(s[i]+" is a directory");
                else
                    System.out.println(s[i]+" is a file");
            }
        }
    }
    
    f.list(new JavaFilter("Ex"))
    

    3 显示为树形

    树形结构应用十分广泛。

    下面这段代码根据用户添加的数据,在内存中构建一个逻辑上等价的树形结构。

    通过ShowTree() 可以把它显示为控制中的样子。

    其中:
    a.add(‘a’, ‘b’);
    a.add(‘b’, ‘e’);
    表示:‘b’ 作为 ‘a’ 的孩子节点;‘e’ 作为 'b’的孩子节点。
    如代码中给出的示例数据,输出结果应该为:

    a–b--e
    | |–f--j
    | |–k
    |–c
    |–d--g–h
    |–i

    请阅读下面的代码,填写缺失的部分(下划线部分)。

    注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
    直接写在题面中不能得分。

    import java.util.*;
    
    class MyTree
    {
        private Map map = new HashMap();
        
        public void add(char parent, char child)
        {
            List<Character> t = (List<Character>)map.get(parent);
            if(t==null)
            {
                t = new Vector<Character>();
                ____________________;  // 填空1
            }
            t.add(child);
        }
        
        public List<Character> getChild(char x)
        {
            return (List<Character>)map.get(x);
        }
    }
    
    public class My
    {
        public static List<String> showTree(MyTree tree, char x)
        {
            List<Character> t = tree.getChild(x);
            
            List<String> r = new Vector<String>();
            
            if(t==null)
            {
                r.add("" + x);
                return r;
            }
                    
            for(int i=0; i<t.size(); i++)
            {
                List<String> ri = showTree(tree, t.get(i));
                for(int j=0; j<ri.size(); j++)
                {
                    String pre = "|  ";
                    if(j==0)
                    {
                        if(i==0)
                            pre = x + "--";
                        else 
                            pre = "|--";
                    }
                    else
                    {
                        if(i==__________________)    // 填空2
                            pre = "   ";
                        else
                            pre = "|  ";
                    }
                    
                    r.add(pre + ri.get(j));
                }
            }
            
            return r;
        }
        
        public static void main(String[] args)
        {
            MyTree a = new MyTree();
            a.add('a', 'b');
            a.add('b', 'e');
            a.add('b', 'f');
            a.add('a', 'c');
            a.add('a', 'd');
            a.add('d', 'g');
            a.add('d', 'i');
            a.add('g', 'h');
            a.add('f', 'j');
            a.add('f', 'k');
            
            List<String> lst = showTree(a, 'a');
            for(int i=0; i<lst.size(); i++)
            {
                System.out.println(lst.get(i));
            }
        }
    }
    
    
    map.put(parent, t)
    i== t.size()-1
    

    4 杨辉三角系数

    (a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:
    
                 1
               1   1
              1  2  1
            1  3   3   1
          1  4   6   4   1
        1  5  10  10   5   1
    

    下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。

       public static int f(int m, int n)
        {
            if(m==0) return 1;
            if(n==0 || n==m) return 1;
            return __________________________; 
        }
    
    
    f(m - 1, n - 1) + f(m - 1, n)
    

    5 圆周率与级数

    圆周率

    我国古代数学家对圆周率方面的研究工作,成绩是突出的。三国时期的刘徽、南北朝时期的祖冲之都在这个领域取得过辉煌战绩。
    有了计算机,圆周率的计算变得十分容易了。如今,人们创造了上百种方法求π的值。其中比较常用且易于编程的是无穷级数法。
    π/4 = 1 – 1/3 + 1/5 – 1/7 + 1/9 - …
    是初学者特别喜欢的一个级数形式,但其缺点是收敛太慢。
    π/2 = 1 + 1/3 +1/32/5 + 1/32/53/7 + 1/32/53/74/9 + …
    是收敛很快的一个级数方法。下面的代码演示了用这种方法计算π值。请填写缺失的代码部分。把填空的
    答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

        double x = 1;
        double y = 1;
        int a = 1;
        int b = 3;
        
        while(y>1e-15)
        {
            y =  __________;
            x += y;
            a++;
            b += 2;
        }
        
        System.out.println(x*2);
    
    
    y * a / b
    

    6 整数翻转

    以下程序把一个整数翻转(8765变为:5678),请补充缺少的代码。

          int n = 8765;
            int m = 0;
            while(n>0)
            {
                m = ________________________;
                n = n / 10;
            }        
            System.out.println(m);
    
    
    
    m * 10 + n % 10
    

    7 自行车行程

    计算行程

    低碳生活,有氧运动。骑自行车出行是个好主意。小明为自己的自行车装了个计数器,可以计算出轮子转动的圈数。在一次骑车旅行中,出发时计算器的示数为begin,到达目的地时的示数为end。下列代码计算了小明一共骑行了多远(单位:公里)。其中d表示小明自行车轮子的直径(单位:米)。

    把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

        public static double getDistance(int begin, int end, double d)
        {
            return (end-begin) * Math.PI * d _________; 
        }
    
    /1000
    

    8 祖冲之割圆法

    南北朝时,我国数学家祖冲之首先把圆周率值
    

    计算到小数点后六位,比欧洲早了1100年!他采

    用的是称为“割圆法”的算法,实际上已经蕴含

    着现代微积分的思想。

    如图【1.jpg】所示,圆的内接正六边形周长

    与圆的周长近似。多边形的边越多,接近的越好

    !我们从正六边形开始割圆吧。

    如图【2.jpg】所示,从圆心做弦的垂线,可

    把6边形分割为12边形。该12边形的边长a’的计

    算方法很容易利用勾股定理给出。之后,再分割

    为正24边形,…如此循环会越来越接近圆周。

    之所以从正六边开始,是因为此时边长与半径

    相等,便于计算。取半径值为1,开始割圆吧!

    以下代码描述了割圆过程。
    程序先输出了标准圆周率值,紧接着输出了不

    断分割过程中多边形边数和所对应的圆周率逼近

    值。

    public class B21
    {
        public static void main(String[] 
    
    args)
        {
            System.out.println("标
    
    准 " + Math.PI);
            
            double a = 1; 
            int n = 6;
            
            for(int i=0; i<10; i++)
            {
                double b = 
    
    Math.sqrt(1-(a/2)*(a/2));
                a = 
    
    Math.sqrt((1-b)*(1-b) + (a/2)*(a/2));
                
                n = 
    
    ______________; //填空
                
                
    
    System.out.println(n + "  " + _______________);  
    
    // 填空
            }
        }
    }
    
    
    
    请分析代码逻辑,并推测划线处的代码。
    
    答案写在 “解答.txt” 文件中
    
    注意:只写划线处应该填的内容,划线前后的内
    
    容不要抄写。
    
    
    n * 2
    a / 2 * n
    

    标准 3.141592653589793
    12 3.105828541230249
    24 3.1326286132812378
    48 3.1393502030468667
    96 3.14103195089051
    192 3.1414524722854624
    384 3.141557607911858
    768 3.1415838921483186
    1536 3.1415904632280505
    3072 3.1415921059992717
    6144 3.1415925166921577

    9 最大5个数

    [12,127,85,66,27,34,15,344,156,344,29,47,....]  
    
    这是某设备测量到的工程数据。
    
    因工程要求,需要找出最大的5个值。
    
    一般的想法是对它排序,输出前5个。但当数据较多时,这样做很浪费时间。因为对输出数据以外的数据进行排序并非工程要求,即便是要输出的5个数字,也并不要求按大小顺序,只要找到5个就可以。
    
    以下的代码采用了另外的思路。考虑如果手里已经抓着5个最大数,再来一个数据怎么办呢?让它和手里的数据比,如果比哪个大,就抢占它的座位,让那个被挤出来的再自己找位子,....
    
    import java.util.*;
    public class B23
    {
        public static List<Integer> max5(List<Integer> lst)
        {
            if(lst.size()<=5) return lst;
            
            int a = _______________________;  // 填空
            List<Integer> b = max5(lst);
            
            for(int i=0; i<b.size(); i++)
            {
                int t = b.get(i);
                if(a>t)
                {
                    __________________;  // 填空
                    a = t;  
                }
            }
            
            return b;
        }
        
        public static void main(String[] args)
        {
            List<Integer> lst = new Vector<Integer>();
            lst.addAll(Arrays.asList(12,127,85,66,27,34,15,344,156,344,29,47));        
            System.out.println(max5(lst));
        }
    }
    
    
        请分析代码逻辑,并推测划线处的代码。
    
        答案写在 “解答.txt” 文件中
    
        注意:只写划线处应该填的内容,划线前后的内容不要抄写。
    
    
    lst.remove(0)
    lst.set(i, a) 或者 b.set(i, a)
    

    10 最大镜像子串

    【代码填空】(满分12分)

    串“abcba”以字母“c”为中心左右对称;串“abba” 是另一种模式的左右对称。这两种情况我们都称这个串是镜像串。特别地,只含有1个字母的串,可以看成是第一种模式的镜像串。 
    
    一个串可以含有许多镜像子串。我们的目标是求一个串的最大镜像子串(最长的镜像子串),如果有多个最大镜像子串,对称中心靠左的优先选中。例如:“abcdeefghhgfeiieje444k444lmn”的最大镜像子串是:“efghhgfe”
    
    下面的静态方法实现了该功能,请仔细阅读并分析代码,填写空白处的代码,使得程序的逻辑合理,结果正确。
    
    // 求最大(长度最大)镜像对称子串
    public static String getMaxMirrorString(String s)
    {
        String max_s = "";  // 所求的最大对称子串
    
        for(int i=0; i<s.length(); i++)
        {
            // 第一种对称模式
            int step = 1;
            try{
                for(;;)
                {
                    if(s.charAt(i-step) != s.charAt(i+step)) break;
                    step++;
                }
            }catch(Exception e){}
            
            String s1 = s.substring(_____________________________);     // 填空1
            
            
            // 第二种对称模式
            step = 0;
            try{
                for(;;)
                {
                    if(_________________________________) break;    // 填空2
                    step++;
                }
            }catch(Exception e){}
            
            String s2 = s.substring(i-step+1,i+step+1);
            
            
            if(s1.length() > max_s.length()) max_s = s1;
            if(s2.length() > max_s.length()) max_s = s2;
        }
        
        return max_s;                
    }
    
    
    【注意】
        只填写缺少的部分,不要抄写已有的代码。
        所填写代码不超过1条语句(句中不会含有分号)
        所填代码长度不超过256个字符。
        答案写在“解答.txt”中,不要写在这里!
    
    i - step + 1, i + step
    s.charAt(i - step) != s.charAt(i + step + 1)
    
    展开全文
  • java算法集训代码填空题练习1

    万次阅读 多人点赞 2019-07-22 22:12:54
    填空的答案(仅填空处的答案,不包括面)存入考生文件夹下对应题号的“解答.txt”中即可。 System.out.println("请在心中想好一个数字(1~100),我来猜"); System.out.println("我每猜一个数字,你要告诉我是...

    1 报数游戏

    有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止。问剩下第几个孩子。下面的程序以10个孩子为例,模拟了这个过程,请完善之(提示:报数的过程被与之逻辑等价的更容易操作的过程所代替)。
    
        Vector a = new Vector();
        for(int i=1; i<=10; i++)
        {
            a.add("第" + i + "个孩子");
        }
        for(;;)
        {
            if(a.size()==1) break;
            for(int k=0; k<2; k++)
                ________________;
            a.remove(0);
        }
            System.out.println(a);
    
    
    a.add(a.remove(0))
    

    2 不连续处断开

    下列代码运行结果为:
    12345
    23456
    89
    23456789
    即把一个串从数字不连续的位置断开。试完善之。

        String s = "12345234568923456789";
        String t = "1";
        for(int i=1; i<s.length(); i++)
        {
            if(s.charAt(i)==s.charAt(i-1)+1)
            {
                t += s.charAt(i);
            }    
            else
            {
                System.out.println(t);
                _____________________________;
            }        
        }
            System.out.println(t);
    
    
    t = "" + s.charAt(i)
    

    3 猜数字游戏

    猜数字

    很多人都玩过这个游戏:甲在心中想好一个数字,乙来猜。每猜一个数字,甲必须告诉他是猜大了,猜小了,还是刚好猜中了。下列的代码模拟了这个过程。其中用户充当甲的角色,计算机充当乙的角色。为了能更快地猜中,计算机使用了二分法。
    阅读分析代码,填写缺失的部分。

    把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

    System.out.println("请在心中想好一个数字(1~100),我来猜");
    System.out.println("我每猜一个数字,你要告诉我是“猜大了”,“猜小了”,还是“猜中”");
    Scanner scan = new Scanner(System.in);
    int v1 = 1;
    int v2 = 100;
    for(;;)
    {
        int m = (v1 + v2)/2;
        System.out.println("我猜是:" + m);
        System.out.println("1.猜得太大了");
        System.out.println("2.猜得太小了");
        System.out.println("3.猜中!");
        System.out.print("请选择:");
        int user = Integer.parseInt(scan.nextLine());
        if(user==3) break;
        if(user==1) _____________;
        if(user==2) _____________;
    }
    
    
    v2 = m - 1
    v1 = m + 1
    

    4 串的反转

    反转串

    我们把“cba”称为“abc”的反转串。
    求一个串的反转串的方法很多。下面就是其中的一种方法,代码十分简洁(甚至有些神秘),请聪明的你通过给出的一点点线索补充缺少的代码。

    把填空的答案(仅填空处的答案,不包括题面)存入考生文件下对应题号的“解答.txt”中即可。

    public static String reverseString(String x)
    {
        if(x==null || x.length()<2) return x;
            return ____________________ + x.charAt(0);
        }
    
    reverseString(x.substring(1))
    

    5 串中找数字

    以下的静态方法实现了:把串s中第一个出现的数字的值返回。
    如果找不到数字,返回-1

    例如:
    s = “abc24us43” 则返回2
    s = “82445adb5” 则返回8
    s = “ab” 则返回-1

    public static int getFirstNum(String s)
    {
        if(s==null || s.length()==0) return -1;
        
        char c = s.charAt(0);
        if(c>='0' && c<='9') return _____________;  //填空
        
        return ___________________;  //填空
    }
    

    请分析代码逻辑,并推测划线处的代码。

    答案写在 “解答.txt” 文件中

    注意:只写划线处应该填的内容,划线前后的内容不要抄写。

    return c - '0'
    
    getFirstNum(s.substring(1))
    

    6 递归连续数

    以下程序打印出0~9的数字,请补充缺少的代码。
    
    public class MyTest
    {
        public static void f(int begin, int end)
        {
            __________________;
            System.out.println(begin);
            f(begin+1, end);    
        }
        public static void main(String[] args)
        {
            f(0,9);
        }
    }
    
    
    if(begin > end)   return
    

    7 复制网站内容
    复制代码
    本程序将网站“www.baidu.com”首页的内容复制保存在文件test.html中。写了如下代码,请完善之:

    import java.net.*;
    import java.io.*;
    class DaSai{
        public static void main(String[] args) throws Exception {
            URL url=__________________________________;
            BufferedReader in =_________________________________;
            String inString;     
            File outfile=new File("test.html");      
            PrintWriter out=new PrintWriter(new FileWriter(outfile));
            while ((inString=in.readLine())!=null){ 
                   out.println(inString);
            }
            in.close(); 
            out.close();
         }
     }
    
    
    new URL("http://www.baidu.com")
    
    new BufferedReader(new InputStreamReader(url.openStream()))
    

    8 股票的风险

    股票风险

    股票交易上的投机行为往往十分危险。假设某股票行为十分怪异,每天不是涨停(上涨10%)就是跌停(下跌10%)。假设上涨和下跌的概率均等(都是50%)。再假设交易过程没有任何手续费。某人在开始的时候持有总价值为x的该股股票,那么100个交易日后,他盈利的可能性是多少呢?
    以下程序通过计算机模拟了该过程,一般的输出结果在0.3左右。请填写缺失的代码。

    把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

        int N = 10000;
        int n = 0;
        
        for(int i=0; i<N; i++)
        {
            double value = 1000.0;    
            for(int k=0; k<100; k++)
            {
                if(Math.random() > _______)
                    value = value * 1.1;
                else
                    value = value * 0.9;
            }
            if(____________) n++;
        }
        
        System.out.println(1.0*n/N);
    
    0.5
    value > 1000
    

    9 基因牛的繁殖

    基因牛

    张教授采用基因干预技术成功培养出一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛。如此循环下去,请问张教授n年后有多少头母牛?
    以下程序模拟了这个过程,请填写缺失的代码。

    把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

    public static class Cow 
    {
        private int age;
        public Cow afterYear()
        {
            age++;
            return age > 2 ? new Cow() : ___________;
        }    
        
        public static void showTotalCowNum(int n)
        {
            List<Cow> list = new ArrayList<Cow>();
            list.add(new Cow());
    
            for (int i = 0; i < n; i++)
            {
                int cowCount = list.size();
                for (int j = 0; j < cowCount; j++)
                {
                    Cow cow = list.get(j).afterYear(); // 填空
                    if (cow != null)
                    {
                        ________________; 
                        list.add(cow);
                    }
                }
            }
            System.out.println(n + "年后,共有:" + list.size());        
        }
    }
    
    
    null
    cow.age++
    

    10 括号的匹配

    下面的代码用于判断一个串中的括号是否匹配
    所谓匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉

    例如:
    …(…[…]…)… 是允许的
    …(…[…)…]… 是禁止的
    对于 main 方法中的测试用例,应该输出:
    false
    true
    false
    false

    import java.util.*;
    public class A22
    {
        public static boolean isGoodBracket(String s)
        {
            Stack<Character> a = new Stack<Character>();
            
            for(int i=0; i<s.length(); i++)
            {
                char c = s.charAt(i);
                if(c=='(') a.push(')');
                if(c=='[') a.push(']');
                if(c=='{') a.push('}');
                
                if(c==')' || c==']' || c=='}')
                {
                    if(____________________) return false;    // 填空
                    if(a.pop() != c) return false;
                }
            }
            
            if(___________________) return false;  // 填空
            
            return true;
        }
        
        public static void main(String[] args)
        {
            System.out.println( isGoodBracket("...(..[.)..].{.(..).}..."));
            System.out.println( isGoodBracket("...(..[...].(.).){.(..).}..."));
            System.out.println( isGoodBracket(".....[...].(.).){.(..).}..."));
            System.out.println( isGoodBracket("...(..[...].(.).){.(..)...."));
        }
    }
    
    
    请分析代码逻辑,并推测划线处的代码。
    
    答案写在 “解答.txt” 文件中
    
    注意:只写划线处应该填的内容,划线前后的内容不要抄写。
    a.empty()
    !a.empty()
    
    展开全文
  • YTU 2607: A代码填空题--更换火车头

    千次阅读 2016-02-07 15:08:21
    2607: A代码填空题--更换火车头 时间限制: 1 Sec 内存限制: 128 MB 提交: 91 解决: 73 题目描述 注:本题只需要提交填写部分的代码,请按照C++方式提交。 假设火车有n节车厢(从前往后编号依次...

    2607: A代码填空题--更换火车头

    时间限制: 1 Sec   内存限制: 128 MB
    提交: 91   解决: 73

    题目描述

    注:本题只需要提交填写部分的代码,请按照C++方式提交。

    假设火车有n节车厢(从前往后编号依次为1,2,3,...,n),每节车厢的人数依次为M1,M2,M3,...,Mn。火车头的编号为0,连接在1号车厢上。火车进站后,将火车头从1号车厢卸下,接在第n节车厢上,反方向行驶。即火车的1号车厢为原来的第n号车厢,...,火车的n号车厢为原来的第1号车厢。请输出火车反向行驶后,每节车厢的人数。

    #include <iostream>
    using namespace std;
    struct Train {
        int num;  //人数
        Train *next;
    };
    Train *creat(int n)
    {
        Train *t=new Train;
        cin>>t->num ;
        if(n==1) {
            t->next = NULL;
            return t;
        }
        t->next = creat(n-1);
        return t;
    }
    void print(Train *p){
        if(p==NULL)
            return ;
        cout<<p->num<<" ";
        print(p->next);
    }
    void del(Train *p)
    {
        if(p==NULL)
            return ;
        Train *t;
        t=p->next;
        delete p;
        del(t);
    }
    Train *rev(Train *p)
    {
        Train *head=NULL,*t;
        while(p){
            t=p->next;      
            p->next = head; 
            head = p;       
    /*******************************   
           请在该部分补充缺少的代码
    ********************************/
        }
        return head;
    }

    int main(void)
    {
        int n;
        Train *head;
        Train *rev(Train *p);
        cin>>n;
        head = creat(n);
        head=rev(head);
        print (head);
        del(head);
        return 0;
    }

    输入

    第一行 n
    第二行 每节车厢的人数

    输出

    火车反向行驶后,每节车厢的人数。

    样例输入

    10 
    110 112 108 100 118 100 60 64 56 62

    样例输出

    62 56 64 60 100 118 100 108 112 110

    迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……

    #include <iostream>
    using namespace std;
    struct Train
    {
        int num;
        Train *next;
    };
    Train *creat(int n)
    {
        Train *t=new Train;
        cin>>t->num ;
        if(n==1)
        {
            t->next = NULL;
            return t;
        }
        t->next = creat(n-1);
        return t;
    }
    void print(Train *p)
    {
        if(p==NULL)
            return ;
        cout<<p->num<<" ";
        print(p->next);
    }
    void del(Train *p)
    {
        if(p==NULL)
            return ;
        Train *t;
        t=p->next;
        delete p;
        del(t);
    }
    Train *rev(Train *p)
    {
        Train *head=NULL,*t;
        while(p)
        {
            t=p->next;
            p->next = head;
            head = p;
            p=t;
        }
        return head;
    }
    int main(void)
    {
        int n;
        Train *head;
        Train *rev(Train *p);
        cin>>n;
        head = creat(n);
        head=rev(head);
        print (head);
        del(head);
        return 0;
    }
    

    展开全文
  • 蓝桥杯代码填空题集锦

    千次阅读 2015-04-07 19:46:13
    填空的答案(仅填空处的答案,不包括面)存入考生文件夹下对应题号的“解答.txt”中即可。 void fun(double dTestNo, int iBase) {  int iT[8];  int iNo;  printf("十进制正小数 %f 转换成 ...
  • 填空的答案(仅填空处的答案,不包括面)存入考生文件夹下对应题号的“解答.txt”中即可。 System.out.println("请在心中想好一个数字(1~100),我来猜"); System.out.println("我每猜一个数字,你要告诉我...
  • #include<bits/stdc++.h> using namespace std; int main() { double ans=0; for(int i=1;i<=9999;i++) { ans+=log(i*1.0)/log(2); //除以log(2)可以换底 } cout<<ans<...}
  • //这里写些代码将alert还原 alert(1); //这里要求还能弹出alert对话框 记录这个话题是因为微博上有人讨论到了,我直接写答案了。 方法1,直接删除 alert。 window.alert = function(){}; delete alert; ...
  • 博客地址:https://blog.csdn.net/kong_gu_you_lan/article/details/78134068 GitHub地址:https://github.com/alidili/Demos/tree/master/FillBlankQuestionDemo
  • 写在前面在上一篇文章《Android 使用代码实现一个填空题》中,我们学习了如何实现一个填空题,今天继续接着上一篇文章的节奏,学习一下如何实现一个选词填空题,由于本文中用到了一些上篇文章的知识点,所以还没有看...
  • 『Python题库 - 填空题』Python笔试填空题 part 1. Python语言概述和Python开发环境配置 part 2. Python语言基本语法元素(变量,基本数据类型,基础运算) part 3. Python中的程序控制结构 (Python if判断,for和...
  • 数据结构填空题

    万次阅读 多人点赞 2020-08-07 13:24:30
    1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 21、 22、 23、 24、 25、 26、 27、 28、 29、 30、 31、 32、 33、 34、 35、 36、 37、 38、 ...6

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,364
精华内容 10,145
关键字:

代码填空题