Java 根据输入和方法的数量列出所有组合 这个问题的抽象版本
我想将0和n-1之间的所有可能的数字赋值生成v变量。我知道,有v^n这样的赋值,因此我从一个生成数字0..v^n-1的循环开始。如何将循环中的枚举数转换为实际赋值?我对n=4和v=7的情况特别感兴趣 原始问题 我的目标是为每个输入分配一个方法,并为所有输入获取所有可能的方法组合 以下是借助于的代码 我的问题是,如果我有4种方法功能A、B、C、D和7个输入:名字、姓氏、电话号码、办公室号码、地址、街道、国家?因此,组合将为4^7=16384。为了得到下面给出的所有可能的组合,输入的公式是什么Java 根据输入和方法的数量列出所有组合 这个问题的抽象版本,java,combinations,Java,Combinations,我想将0和n-1之间的所有可能的数字赋值生成v变量。我知道,有v^n这样的赋值,因此我从一个生成数字0..v^n-1的循环开始。如何将循环中的枚举数转换为实际赋值?我对n=4和v=7的情况特别感兴趣 原始问题 我的目标是为每个输入分配一个方法,并为所有输入获取所有可能的方法组合 以下是借助于的代码 我的问题是,如果我有4种方法功能A、B、C、D和7个输入:名字、姓氏、电话号码、办公室号码、地址、街道、国家?因此,组合将为4^7=16384。为了得到下面给出的所有可能的组合,输入的公式是什么
loop firstname lastname phoneno officeno add street country
0 A A A A A A A
1 A A A A A A B
2 A A A A A A C
3 A A A A A A D
...
12000 C A D B B A D
...
16383 D D D D D D D
public static void main(String[] args) {
for (int i = 0; i <= 16383; i++) {
int name_function_index= i / FUNCTION_NUMBER;
int phone_no_function_index= i % FUNCTION_NUMBER;
int office_no_function_index= ??
int add_no_function_index= ??
任何帮助都将不胜感激 改变基数使转换变得明显
当您有v个变量var0到varv-1,并且希望为它们分配0到n-1之间的数字时,可以将枚举数i转换为基数n,并为每个变量选择一个数字
实例
你有v=3个变量和n=2个数字。您知道存在vn个可能的赋值,并使用计数器i枚举它们。正常情况下,人类以十进制10为基数计数,但这一次,我们以二进制2为基数计数
i |分配
dec bin | var2 var1 var0
-----+--------
0 000 | 0 0 0
1 001 | 0 0 0
2 010 | 0 1 0
3 011 | 0 1 1
4 100 | 1 0 0
5 101 | 1 0 1
6 110 | 1 1 0
7 111 | 1 1 1
i的二进制表示的三位数字直接对应于用i枚举的变量赋值
将枚举数i转换为赋值
为了得到一个赋值,我们提取了以n为基数的i的v位
假设以10为基数的正常/十进制数字i=3149,并希望提取其四位数字。你会的
digit0 = i % 10; // same as i / 1 % 10
digit1 = i / 10 % 10;
digit2 = i / 100 % 10;
digit3 = i / 1000 % 10;
第x位的公式为i/10 x%10。
如果基数n不是10,那么公式就是i/nx%n
实例
v=3和n=4的一个小示例程序:
改进
对于一个更短、更干净、更可扩展的程序,您不应该编写类似这样的东西
var5 = i / (n * n * n * n * n) % n
手动。使用数组和循环。Java不是JavaScript-您不能将Java作为一个脚本运行snippet@Bohemian对不起,我把代码复制粘贴到了错误的框中。我编辑过。如果你真的讨论了f函数和I输入之间的组合数,那么答案应该是f·I,但似乎你实际上对长度为n的字符串的数量感兴趣,只使用c字符,这就是你已经知道的c^n。有什么问题?你在问如何用Java编写c^n吗?这是Math.powc,n.当我们甚至不知道这些变量应该是什么的时候,我们怎么知道加法函数索引和office函数索引的公式呢?这两个变量在你的问题中只出现一次,即var=??。你把我弄丢了。变量不能返回某些内容。int不能存储字符串列表。无论如何,你应该在问题中包含重要信息,而不是将这些信息作为评论。
loop firstname lastname phoneno officeno add street country
0 A A A A A A A
1 A A A A A A B
2 A A A A A A C
3 A A A A A A D
...
12000 C A D B B A D
...
16383 D D D D D D D
public static void main(String[] args) {
for (int i = 0; i <= 16383; i++) {
int name_function_index= i / FUNCTION_NUMBER;
int phone_no_function_index= i % FUNCTION_NUMBER;
int office_no_function_index= ??
int add_no_function_index= ??
digit0 = i % 10; // same as i / 1 % 10
digit1 = i / 10 % 10;
digit2 = i / 100 % 10;
digit3 = i / 1000 % 10;
int var0, var1, var2;
int n = 4;
System.out.println(" i | Assignment");
System.out.println("-----+-----------");
for (int i = 0; i < Math.pow(n, 3); ++i) {
var0 = i % n; // = i / Math.pow(n, 0) % n
var1 = i / n % n; // = i / Math.pow(n, 1) % n
var2 = i / (n * n) % n; // = i / Math.pow(n, 2) % n
System.out.format("%4d | %2d %2d %2d\n", i, var2, var1, var0);
}
i | Assignment
-----+-----------
0 | 0 0 0
1 | 0 0 1
2 | 0 0 2
3 | 0 0 3
4 | 0 1 0
.
.
.
61 | 3 3 1
62 | 3 3 2
63 | 3 3 3
var5 = i / (n * n * n * n * n) % n