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

算法练习题 专栏收录该内容
497 篇文章 55 订阅

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()
  • 19
    点赞
  • 23
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值