java算法集训代码填空题练习2
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算法集训代码填空题练习2的更多相关文章
- java算法集训代码填空题练习3
1 数组转置 编写程序将2行3列的数组行列置换复制给3行2列的数组(即数组的转置).已经写了如下代码,请完善之: class y{ public static void main(String[] a ...
- java算法集训代码填空题练习1
1 报数游戏 有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止.问剩下第几个孩子.下面的程序以10个孩子为例,模拟了这个过程,请完善之 ...
- java算法集训结果填空题练习1
1 空瓶换汽水 浪费可耻,节约光荣.饮料店节日搞活动:不用付费,用3个某饮料的空瓶就可以换一瓶该饮料.刚好小明前两天买了2瓶该饮料喝完了,瓶子还在.他耍了个小聪明,向老板借了一个空瓶,凑成3个,换了一 ...
- java算法集训结果填空题练习2
1 欧拉与鸡蛋 大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子.她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋. 欧拉随便问:"卖了多少鸡蛋呢?" 不料一个说:" ...
- YTU 2607: A代码填空题--更换火车头
2607: A代码填空题--更换火车头 时间限制: 1 Sec 内存限制: 128 MB 提交: 91 解决: 73 题目描述 注:本题只需要提交填写部分的代码,请按照C++方式提交. 假设火车有 ...
- 算法笔记_116:算法集训之代码填空题集三(Java)
目录 1 数组转置 2 文件管理 3 显示为树形 4 杨辉三角系数 5 圆周率与级数 6 整数翻转 7 自行车行程 8 祖冲之割圆法 9 最大5个数 10 最大镜像子串 1 数组转置 编写程序将 ...
- 算法笔记_115:算法集训之代码填空题集二(Java)
目录 1 连续数的公倍数 2 孪生素数 3 迷宫走法 4 拍7游戏 5 排列为平方数 6 平面点最小距离 7 扑克牌排列 8 三进制转十进制 9 识别复制串 10 蔬菜价格计算 1 连续数的公倍 ...
- 算法笔记_113:算法集训之代码填空题集一(Java)
目录 1 报数游戏 2 不连续处断开 3 猜数字游戏 4 串的反转 5 串中找数字 6 递归连续数 7 复制网站内容 8 股票的风险 9 基因牛的繁殖 10 括号的匹配 1 报数游戏 有n个孩子 ...
- java算法 蓝桥杯(题+答案) 方格填数
6.方格填数 (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...
随机推荐
- 网络编程采用HttpClient类更好
一般人网络编程普遍用HttpWebRequest,类似下面的实现.我也一般都这样实现 string result = string.Empty; HttpWebRequest request = (H ...
- go 数组 字符串 切片
数组 数组定义方式 var a [3]int // 定义长度为3的int型数组, 元素全部为0 var b = [...]int{1, 2, 3} // 定义长度为3的int型数组, 元素为 1, 2 ...
- 使用Python创建一个系统监控程序--李渣渣(lizaza.cn)
最近在做个人网站,但是由于服务器资源不足,偶尔会出现系统崩溃的现象,所以想写一个程序来实时监控系统状态.当系统资源占用过高时发送邮件提醒. psutil(进程和系统实用程序)是一个跨平台的库,用于检索 ...
- 错误 在应用程序级别之外使用注册为 allowDefinition='MachineToApplic
错误 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的.如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误. 如果 ...
- Java中this()和super()
Java关键字this只能用于方法体中.this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的th ...
- struts2 全局拦截器,显示请求方法和参数
后台系统中应该需要一个功能那就是将每个请求的url地址和请求的参数log出来,方便系统调试和bug追踪,使用struts2时可以使用struts2的全局拦截器实现此功能: import java.ut ...
- Winform GDI+绘图二:绘制旋转太极图
大家好,今天有时间给大家带来Winform自绘控件的第二部分,也是比较有意思的一个控件:旋转太极图. 大家可以停下思考一下,如果让你来绘制旋转的太极图,大家有什么样的思路呢?我今天跟大家展示一下,我平 ...
- 【Python代码】TSNE高维数据降维可视化工具 + python实现
目录 1.概述 1.1 什么是TSNE 1.2 TSNE原理 1.2.1入门的原理介绍 1.2.2进阶的原理介绍 1.2.2.1 高维距离表示 1.2.2.2 低维相似度表示 1.2.2.3 惩罚函数 ...
- linux常用命令---中英文设置
中英文设置 LANG变量 echo $LANG---------查看当前编码 locale -----------------设置之后可查看详细信息 中文设置 # vim /etc/profile.d ...
- [!] Unable to find a pod with name, author, summary, or description matching `AFNetworking`
大量的答案是删除~/Library/Caches/CocoaPods/search_index.json 没有起作用 有用答案: https://blog.csdn.net/qq_35827461/ ...