分享
记一次算法练习
埃赛尔 · · 3785 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
算法一直是自己的弱项 通过算法来学习语言吧
Java版:
/**
* 算法练习 1
* Created by Exile on 2017年5月25日.
* 1 N(N为偶数)个数字,把数字平分 N/2 组,使得每组的数字和相等。
*/
public class ArithmeticTest1 {
// 题目1偶数个数组
public static void main(String[] args) {
int[] evenNumberArry = new int[]{1, 7, 2, 7, 6, 5, 2, 8, 3, 4};
int arryNum = evenNumberArry.length / 2;
// 1 计算sum;
int sum = 0;
for (int i : evenNumberArry) {
sum = sum + i;
}
// 2 计算出每组的和是多少
int arryMax = sum / arryNum;
for (int i = 0; i < evenNumberArry.length; i++) {
int value = arryMax - evenNumberArry[i];
int temp;
// 假定一定会有一个与之组成一组
for (int j = i + 1; j < evenNumberArry.length; j++) {
if (evenNumberArry[j] == value) {
temp = evenNumberArry[i + 1];
evenNumberArry[i + 1] = value;
evenNumberArry[j] = temp;
}
}
}
for (int i : evenNumberArry) {
System.out.println(i);
}
}
}
import java.util.ArrayList;
import java.util.Random;
/**
* 算法练习 2
* Created by Exile on 2017年5月25日.
* NxN的棋盘,每个格子可以放一个车,有M个车,问:每个车放完后,棋盘还剩多少格子是所有车攻击范围外?
* 车可以重叠
*/
public class ArithmeticTest2 {
public static void main(String[] args) {
// n和m
int m = 3;
int n = 3;
ArrayList<Model> modelList = createModelList(m, n);
ArrayList<Model> manList = new ArrayList<>();
for (Model model : modelList) {
System.out.println("当前model:" + model.toString());
}
// 方法1:从头到尾撸一遍
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
manList.add(new Model(i, j));
}
}
System.out.println("筛选前:" + manList.size());
// 速度太快的话会出问题
for (int i = 0; i < modelList.size(); i++) {
for (int j = 0; j < manList.size(); j++) {
if (!modelList.get(i).getAttackOutCall(manList.get(j))) {
manList.remove(j);
}
}
}
// }
System.out.println("筛选后:" + manList.size());
for (Model model : manList) {
System.out.println(model.toString());
}
}
/**
* 根据输入的mn生成对应个数的m对象
*
* @param m
* @param n
* @return
*/
private static ArrayList<Model> createModelList(int m, int n) {
ArrayList<Model> models = new ArrayList<>();
for (int i = 0; i < m; i++) {
models.add(new Model(n));
}
return models;
}
public static class Model {
private int x;
private int y;
public Model(int n) {
Random random = new Random();
this.x = random.nextInt(n);
this.y = random.nextInt(n);
}
public Model(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public String toString() {
return "Model{" +
"x=" + x +
", y=" + y +
'}';
}
public boolean getAttackOutCall(Model mainModel) {
if (this.getX() == mainModel.getX() || this.getY() == mainModel.getY()) {
return false;
}
return true;
}
}
}
golang版:
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信3785 次点击
上一篇:Web安全
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
算法一直是自己的弱项 通过算法来学习语言吧
Java版:
/**
* 算法练习 1
* Created by Exile on 2017年5月25日.
* 1 N(N为偶数)个数字,把数字平分 N/2 组,使得每组的数字和相等。
*/
public class ArithmeticTest1 {
// 题目1偶数个数组
public static void main(String[] args) {
int[] evenNumberArry = new int[]{1, 7, 2, 7, 6, 5, 2, 8, 3, 4};
int arryNum = evenNumberArry.length / 2;
// 1 计算sum;
int sum = 0;
for (int i : evenNumberArry) {
sum = sum + i;
}
// 2 计算出每组的和是多少
int arryMax = sum / arryNum;
for (int i = 0; i < evenNumberArry.length; i++) {
int value = arryMax - evenNumberArry[i];
int temp;
// 假定一定会有一个与之组成一组
for (int j = i + 1; j < evenNumberArry.length; j++) {
if (evenNumberArry[j] == value) {
temp = evenNumberArry[i + 1];
evenNumberArry[i + 1] = value;
evenNumberArry[j] = temp;
}
}
}
for (int i : evenNumberArry) {
System.out.println(i);
}
}
}
import java.util.ArrayList;
import java.util.Random;
/**
* 算法练习 2
* Created by Exile on 2017年5月25日.
* NxN的棋盘,每个格子可以放一个车,有M个车,问:每个车放完后,棋盘还剩多少格子是所有车攻击范围外?
* 车可以重叠
*/
public class ArithmeticTest2 {
public static void main(String[] args) {
// n和m
int m = 3;
int n = 3;
ArrayList<Model> modelList = createModelList(m, n);
ArrayList<Model> manList = new ArrayList<>();
for (Model model : modelList) {
System.out.println("当前model:" + model.toString());
}
// 方法1:从头到尾撸一遍
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
manList.add(new Model(i, j));
}
}
System.out.println("筛选前:" + manList.size());
// 速度太快的话会出问题
for (int i = 0; i < modelList.size(); i++) {
for (int j = 0; j < manList.size(); j++) {
if (!modelList.get(i).getAttackOutCall(manList.get(j))) {
manList.remove(j);
}
}
}
// }
System.out.println("筛选后:" + manList.size());
for (Model model : manList) {
System.out.println(model.toString());
}
}
/**
* 根据输入的mn生成对应个数的m对象
*
* @param m
* @param n
* @return
*/
private static ArrayList<Model> createModelList(int m, int n) {
ArrayList<Model> models = new ArrayList<>();
for (int i = 0; i < m; i++) {
models.add(new Model(n));
}
return models;
}
public static class Model {
private int x;
private int y;
public Model(int n) {
Random random = new Random();
this.x = random.nextInt(n);
this.y = random.nextInt(n);
}
public Model(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public String toString() {
return "Model{" +
"x=" + x +
", y=" + y +
'}';
}
public boolean getAttackOutCall(Model mainModel) {
if (this.getX() == mainModel.getX() || this.getY() == mainModel.getY()) {
return false;
}
return true;
}
}
}
golang版: