如何使用scanf更改此算法

时间:2016-04-03 02:03:48

标签: algorithm permutation pseudocode discrete-mathematics

如何使用Scanf改变组合?

  

编写一个程序,提示用户输入五位实验室访问代码,以无符号方式读取   然后整数然后在屏幕上打印每个五位数的访问代码(可能带有前导零)   等价的(有32个)。请注意,1和2位于同一个按钮上,3和4也是如此。   9和0也在同一个按钮上。   下图是第一个按钮2和3上具有0和1的密钥访问设备的示例   在下一个按钮等等。

0 | _ | {1,2}

1 | _ | {3,4}

2 | _ | {5,6}

3 | _ | {7,8}

4 | _ | {9,0}

#include <stdio.h>

int main(void) {
#define foreach( intpvar, intary ) int* intpvar; for( intpvar=intary; intpvar < (intary + (sizeof(intary)/sizeof(intary[0]))) ; intpvar++)
    int a1[]={1,2};
    int a2[]={3,4};
    int a3[]={5,6};
    int a4[]={7,8};
    int a5[]={9,0};
    foreach (p1, a1) {
        foreach (p2, a2) {
            foreach (p3, a3) {
                foreach (p4, a4) {
                    foreach (p5, a5) {
                         printf("%d %d %d %d %d\n",*p1,*p2,*p3,*p4, *p5);
                        }
                }
            }
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

  

因为5组2只给我10个组合。

不,它给你2 ^ 5 = 32种组合,因为你可以选择两个值中的一个,五次。想象一下代码是13579 - 等效代码是:

13579
23579
14579
24579
13679
23679
14679
24679
13589
23589
14589
24589
13689
23689
14689
24689
13570
23570
14570
24570
13670
23670
14670
24670
13580
23580
14580
24580
13680
23680
14680
24680

所有这些代码都映射为依次按下五个按钮。无论如何:你的算法基本上是:

foreach option in group 0
  foreach option2 in group 1
     foreach option3 in group 2
       foreach option4 in group 3
         foreach option5 in group 4
           print option option2 option3 option4 option5