Java 根据输入和方法的数量列出所有组合 这个问题的抽象版本

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。为了得到下面给出的所有可能的组合,输入的公式是什么

我想将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