题目如下:
假设有n个item,k个box。将item放入box中,编写程序打印出所有可能的结果,结果包括可能出现的错误情况。
例:
假设k=3,设为a、b、c。n=10。
打印出的结果可能为:
0,0,10
0,1,9
0,2,8
1,1,8
分析为:
a+b+c = 10
a、b、c都是 大于0小于10的数
import java.util.ArrayList;
import java.util.List;
public class TestGroup {
public static void main(String[] args) {
// 盒子个数
int k = 3;
// 条目个数
int n = 10;
// 用于存储初始化数据
List<int[]> boxList = new ArrayList<int[]>();
// 存储过滤后的数据
List<int[]> copyBoxList = new ArrayList<int[]>();
// 初始化list
initList(boxList, k, n);
for(int[] eachbox : boxList) {
// 判断数组求和
if(!isEqualsTotal(eachbox, n)){
continue;
}
// 判断数组中是否存在前面大于后面的数据
if(isExistBeforeBig(eachbox)){
continue;
}
copyBoxList.add(eachbox);
}
for(int[] eachbox : copyBoxList) {
String boxStr = "";
for(int item : eachbox) {
boxStr = boxStr + item +",";
}
System.out.println(boxStr.substring(0, boxStr.length()-1));
}
System.out.println(copyBoxList.size());
}
// 判断数组中是否存在前面大于后面的数据
public static boolean isExistBeforeBig(int[] box) {
for(int i=0;i<box.length-1;i++) {
if(box[i] > box[i+1]) {
return true;
}
}
return false;
}
// 计算数组中的数据总和是否等于条目个数
public static boolean isEqualsTotal(int[] box, int n) {
int total = 0;
for(int i=0;i<box.length;i++) {
total += box[i];
}
return total==n;
}
// 初始化List
public static void initList(List<int[]> boxList, int k, int n) {
int[] boxArray = new int[k];
set(boxList, boxArray, n, 0, k);
}
// 递归式填充数组
public static void set(List<int[]> boxList, int[] boxArray, int n, int index, int k) {
int i = -1;
while(i++<n) {
if(index+1<k) {
boxArray[index] = i;
set(boxList, boxArray, n, index+1, k);
}else{
int[] tempBox = new int[k];
for(int m=0;m<boxArray.length;m++){
tempBox[m] = boxArray[m];
}
tempBox[k-1] = i;
boxList.add(tempBox);
}
}
}
}
分享到:
相关推荐
分组加密算法是对称加密算法的一种,使用相同的密钥来实现加密和解密。以 DES 加密算法为例,掌握分组加密算法加密、解密的过程实现。 一、加密过程 1. 初始化密钥:使用 KeyGenerator 类创建对称密钥,指定算法...
实现最优分组算法通常涉及多种技术,包括贪心算法、动态规划、回溯法和遗传算法等。贪心算法倾向于每次做出局部最优决策,希望全局结果也是最优的;动态规划则通过构建状态空间来求解,存储之前计算过的子问题结果,...
针对已有正则表达式分组算法的分组效果与分组时间难以平衡的问题,提出了基于预分类的标签传播分组算法。该算法分析了规则间膨胀特征,基于此对正则表达式集合进行预分类,借鉴标签传播思想对包含克林闭包的正则...
这篇文章的主要内容是关于如何在FPGA(现场可编程门阵列)上实现FBC分组密码算法。下面我将详细介绍这个话题,包括FPGA硬件技术、FBC分组密码算法、以及在FPGA上实现加密算法的诸多细节。 首先,FPGA是一种可以通过...
在Java编程中,分组算法...总结来说,这个简单的Java分组算法实现了将数组按固定数量分组的功能,适用于理解基本的分组逻辑。但在实际开发中,我们可能会选择利用Java提供的高级特性或库,以提高代码的可读性和性能。
二、DES 算法实现过程 DES(Data Encryption Standard)算法是一种常用的分组密码算法,使用 64 位密钥对明文进行加密。DES 算法的实现过程可以分为以下步骤: 1. 密钥生成:生成 64 位密钥,并将其分成两部分:...
分组密码算法DES的实现代码 c++实现 注释详尽
本文将详细解析"信息安全实习二分组加密算法实现图形化"这一主题,以及涉及到的相关知识点。 首先,我们要理解二分组加密算法的概念。二分组加密算法是一种基于块密码的加密方式,它将明文数据分为固定长度的块进行...
在C++中实现DES算法,需要对上述步骤进行编程实现。`分组密码.cpp`文件很可能是包含这种实现的源代码。通常,你需要定义数据结构来存储明文、密文和密钥,然后编写函数来执行各个步骤,如IP置换、S盒和P盒操作等。`...
总的来说,DES算法的实现涉及到对称密钥管理、数据分组、补位规则以及不同分组模式的选择和使用。虽然现在DES的安全性已经被其他更强的加密算法(如AES)所超越,但对于理解加密原理和技术发展历史而言,DES仍然是一...
典型密码算法及其C语言实现共13章节,详细讲述了一些典型密码算法的算法原理及C语言实现。密码算法包括:序列密码、分组密码、公钥密码和Hash算法。其中序列密码有祖冲之算法,分组密码有DES、3DES和SMS4算法,公钥...
通过优化实现,算法实现了最高运行速率为296.74MHz,相较于有限状态机实现的运行速率,提升了98.28%。此外,算法的吞吐量达到了37.98Gbps,相较于有限状态机实现,提升了约33倍。 这些成果表明,流水线设计方法对于...
PRESENT是一种轻量级的分组密码算法,设计于2007年,主要用于嵌入式系统和物联网(IoT)设备。它以其高效性和低资源需求而闻名,适合在有限计算能力的硬件上实现。该算法采用了8x32位的S盒(Substitution Box)和一个...
在分析星系分组算法的并行设计与优化过程中,涉及了一系列关键的IT知识点,包括高性能计算、并行计算、分布式系统、内存管理、编程模型等。现在,我们来详细介绍这些知识点。 首先,高性能计算(HPC)是涉及使用...
基于FPGA的祖冲之序列密码算法实现,涉及的祖冲之算法(ZUC)是我国研发的针对LTE网络的标准密码算法。祖冲之算法涵盖了三个关键部分:ZUC算法本身、加密算法(128-EEA3)和完整性检测算法(128-EIA3)。目前对于...
《Serpent分组算法标准》 Serpent算法,以其毒蛇的名称,是一种用于高级加密标准(Advanced Encryption Standard,AES)的竞争提案。由Ross Anderson、Eli Biham和Lars Knudsen三位专家提出,它在设计上强调保守但...
本文将深入探讨如何使用Matlab编程来实现一个分组遗传算法,以解决复杂的船只指派问题。 首先,我们要理解的是指派问题。这是一种组合优化问题,旨在找到一种最优的方式将一组任务(在本例中是船只)分配给另一组...
总的来说,PUFFIN轻型分组密码算法的VC代码实现提供了一个学习和研究密码学原理,特别是Feistel结构和轻型密码设计的实例。通过深入理解和分析这个代码,你可以增强在密码学和嵌入式系统领域的技能。