如何打印 5 位访问代码的 32 种不同组合(每个数字 2 种选择(2^5))?

How to print the 32 different combinations of a 5-digit access code(2 choices per number(2^5))?

我正在尝试编写一个程序,扫描 5 位数的键盘访问代码,然后 return 可以模仿访问代码的 32 种不同方式。这意味着每个按钮有 2 个可能的选择;因此,每个 5 位访问代码有 2^5 = 32 种组合。我的程序成功地 returns 用户按下了哪些按钮以及按下了多少次,但是我在为各种等效组合实现一段代码时遇到了麻烦。问题是:如何实现 return 其他 32 个等效访问代码的代码?

键盘看起来像这样:

(按钮 1-5)

按钮 1:1 和 2

按钮 2:3 和 4

按钮 3:4 和 6

按钮 4:7 和 8

按钮 5:9 和 0

/*Headers*/
#include<stdio.h>
#include<stdlib.h>
#define SIZE 5


int main (void){

  /***** Key Pad ******/
   /*   (Buttons 1-5)

Button 1: 1 & 2

Button 2: 3 & 4

Button 3: 4 & 6

Button 4: 7 & 8

Button 5: 9 & 0 */
/***** Key Pad**** */


 /* Data */
unsigned int input1[2];
unsigned int input2[2];
unsigned int input3[2];
unsigned int input4[2];
unsigned int input5[2];
unsigned int x=0;
unsigned int i=0;
unsigned int j=0;
unsigned int k=0;
unsigned int l=0;
unsigned int m=0;
unsigned int z=0;


for(z=0;z<15;z++){

printf("--");

}
printf("\n");
printf("\t*** KEY PAD ***\n");
printf("Button 1: 1 or 2\n");
printf("Button 2: 3 or 4\n");
printf("Button 3: 5 or 6\n");
printf("Button 4: 7 or 8\n");
printf("Button 5: 9 or 0\n");


for(z=0;z<15;z++){

printf("--");

}

printf("\n");

/* Code to enter integers into the key pad */
printf("Enter the five digit lab access code\n");
printf("Type one number at a time and press 'enter' after each digit\n");
scanf("%d%d%d%d%d", &input1, &input2, &input3, &input4, &input5);




if( input1 == 1 || input1 == 2){
      input1[0] = 2;
      input1[1] = 1;

         }else{
if(input1 == 3 || input1 == 4){
       input1[0] = 4;
       input1[1] = 3;

         }else{
if(input1 == 5 || input1 == 6){
       input1[0] = 6;
       input1[1] = 5;

         }else{
if(input1 == 7 || input1 == 8){
      input1[0] = 8;
      input1[1] = 7;

         }else{
if(input1 == 9 || input1 == 0){
      input1[0] = 9;
      input1[1] = 0;

}}}}}//End IF/ELSE





if( input2 == 1 || input2 == 2){
      input2[0] = 2;
      input2[1] = 1;

         }else{
if(input2 == 3 || input2 == 4){
       input2[0] = 4;
       input2[1] = 3;


         }else{
if(input2 == 5 || input2 == 6){
       input2[0] = 6;
       input2[1] = 5;

         }else{
if(input2 == 7 || input2 == 8){
       input2[0] = 8;
       input2[1] = 7;

         }else{
if(input2 == 9 || input2 == 0){
       input2[0] = 9;
       input2[1] = 0;

}}}}}//End IF/ELSE



 if( input3 == 1 || input3 == 2){
      input3[0] = 2;
      input3[1] = 1;

         }else{
 if(input3 == 3 || input3 == 4){
     input3[0] = 4;
     input3[1] = 3;

         }else{
 if(input3 == 5 || input3 == 6){
     input3[0] = 6;
     input3[1] = 5;

         }else{
if(input3 == 7 || input3 == 8){
    input3[0] = 8;
    input3[1] = 7;

         }else{
if(input3 == 9 || input3 == 0){
     input3[0] = 9;
     input1[1] = 0;

}}}}}//End IF/ELSE




if( input4 == 1 || input4 == 2){
     input4[0] = 2;
     input4[1] = 1;

         }else{
if(input4 == 3 || input4 == 4){
     input4[0] = 4;
     input4[1] = 3;

         }else{
if(input4 == 5 || input4 == 6){
     input4[0] = 6;
     input4[1] = 5;

         }else{
if(input4 == 7 || input4 == 8){
     input4[0] = 8;
     input4[1] = 7;

         }else{
if(input4 == 9 || input4 == 0){
     input4[0] = 9;
     input4[1] = 0;

 }}}}}//End IF/ELSE




 if( input5 == 1 || input5 == 2){
     input5[0] = 2;
     input5[1] = 1;


         }else{
if(input5 == 3 || input5 == 4){
     input5[0] = 4;
     input5[1] = 3;

         }else{
if(input5 == 5 || input5 == 6){
     input5[0] = 6;
     input1[1] = 5;

         }else{
if(input5 == 7 || input5 == 8){
     input5[0] = 8;
     input5[1] = 7;

         }else{
if(input5 == 9 || input5 == 0){
     input5[0] = 9;
     input5[1] = 0;

 }}}}}



for (i=0; i<2; i++) {
    for (j=0; j<2; j++) {
        for (k=0; k<2; k++) {
           for (l=0; l<2; l++) {
              for (m=0; m<2; m++) {


  printf("%d%d%d%d%d\n", input1[i], input2[j], input3[k], input4[l], input5[m]);
        }
    }
    }

    }

 }




 printf("\n\n");


 for(z=0;z<15;z++){

 printf("--");

 }

 printf("\n\n");

         }//End of Main

这是一个示例,在 java 中,3 位数字。我为每个数字使用一个 2 元素数组,它被初始化为你的按钮 0 设置,你需要逻辑将它初始化为实际的按钮设置,但这个想法非常简单,你应该能够轻松扩展它:

    int[] dig1 = new int[2];
    int[] dig2 = new int[2];
    int[] dig3 = new int[2];
    dig1[0] = 0;
    dig1[1] = 9;
    dig2[0] = 0;
    dig2[1] = 9;
    dig3[0] = 0;
    dig3[1] = 9;
    for (int i=0; i<2; i++) {
        for (int j=0; j<2; j++) {
            for (int k=0; k<2; k++) {
                System.out.println(dig1[i]+" " + dig2[j] + " "+dig3[k]);
            }
        }
    }