如何打印 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]);
}
}
}
我正在尝试编写一个程序,扫描 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]);
}
}
}