• java算法集训代码填空题练习1


    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()
    
  • 相关阅读:
    jsp 防止表单多次提交
    linux 部署java 项目命令
    checkbox 选中获取值
    java 实现用户自由选择字段实现导出EXCEL表格
    从七牛服务下载PDF文件
    【sping揭秘】9、容器内部事件发布(二)
    【sping揭秘】8、容器内部事件发布(一)
    【sping揭秘】7、国际化信息支持
    【sping揭秘】6、IOC容器之统一资源加载策略
    【sping揭秘】5、IOC容器(一)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077881.html
Copyright © 2020-2023  润新知