C 编写打印排列的程序

C 编写打印排列的程序,c,arrays,combinations,permutation,C,Arrays,Combinations,Permutation,考虑一个钥匙访问设备,上面有5个按钮,每个按钮有2个数字: 例如: 按钮A:12 按钮B:3 4 按钮C:56 按钮D:7 8 按钮E:9 0 每个按钮有2个可能的选择;因此,每个5位访问码有2^5=32个组合 例如: 代码1 3 5 7 9将使用与代码2 4 6 8 0相同的按钮模式输入(模式=ABCDE) 使用与代码1 3 2相同的按钮模式输入代码1 4 4 1(模式=ABBBA) 提示用户输入访问代码并检查其是否在范围(0–99999)内后,计算并在屏幕上打印32个不同的代码 我能够编写这

考虑一个钥匙访问设备,上面有5个按钮,每个按钮有2个数字:

例如:

按钮A:12

按钮B:3 4

按钮C:56

按钮D:7 8

按钮E:9 0

每个按钮有2个可能的选择;因此,每个5位访问码有2^5=32个组合

例如:

代码1 3 5 7 9将使用与代码2 4 6 8 0相同的按钮模式输入(模式=ABCDE)

使用与代码1 3 2相同的按钮模式输入代码1 4 4 1(模式=ABBBA)

提示用户输入访问代码并检查其是否在范围(0–99999)内后,计算并在屏幕上打印32个不同的代码

我能够编写这个程序,但它是使用代码中显示的32条打印语句完成的:

#include <stdio.h>
#define MAXNUM 5
#define COMBO 32

int main(){

    int input;
    int num[MAXNUM];
    int numtemp[MAXNUM];
    int i;

    printf("Please enter your 5 numbers within the range of [0~99999]:\n");
    scanf("%d", &input);
    while(input > 99999 || input < 0){
        printf("The inputted number is not in the specified range[0~99999], Please enter a new number:\n");
        scanf("%d", &input);
    }//end while

    for(i = 4; i >= 0; --i){
        num[i] = input%10;  
        input /= 10;
    }//set num array to each digit of inputted number

    for(i = 0; i < MAXNUM; ++i){
        switch(num[i]){
            case 1:
              numtemp[i] = 2;
              break;
            case 2:
              numtemp[i] = 1;
              break;
            case 3:
              numtemp[i] = 4;
              break;
            case 4:
              numtemp[i] = 3;
              break;
            case 5:
              numtemp[i] = 6;
              break;
            case 6:
              numtemp[i] = 5;
              break;
            case 7:
              numtemp[i] = 8;
              break;
            case 8:
              numtemp[i] = 7;
              break;
            case 9:
              numtemp[i] = 0;
              break;
            case 0:
              numtemp[i] = 9;
              break;
        }//end switch
    }//array numtemp now has all opposite values of array num

    //32 print statements for the different combinations
    printf("Here are your 32 combinations:\n");
    printf("%d%d%d%d%d\n", num[0], num[1], num[2], num[3], num[4]);
    printf("%d%d%d%d%d\n", numtemp[0], num[1], num[2], num[3], num[4]);
    printf("%d%d%d%d%d\n", num[0], numtemp[1], num[2], num[3], num[4]);
    printf("%d%d%d%d%d\n", numtemp[0], numtemp[1], num[2], num[3], num[4]);
    printf("%d%d%d%d%d\n", num[0], num[1], numtemp[2], num[3], num[4]);
    printf("%d%d%d%d%d\n", numtemp[0], num[1], numtemp[2], num[3], num[4]);
    printf("%d%d%d%d%d\n", num[0], numtemp[1], numtemp[2], num[3], num[4]);
    printf("%d%d%d%d%d\n", numtemp[0], numtemp[1], numtemp[2], num[3], num[4]);
    printf("%d%d%d%d%d\n", num[0], num[1], num[2], numtemp[3], num[4]);
    printf("%d%d%d%d%d\n", numtemp[0], num[1], num[2], numtemp[3], num[4]);
    printf("%d%d%d%d%d\n", num[0], numtemp[1], num[2], numtemp[3], num[4]);
    printf("%d%d%d%d%d\n", numtemp[0], numtemp[1], num[2], numtemp[3], num[4]);
    printf("%d%d%d%d%d\n", num[0], num[1], numtemp[2], numtemp[3], num[4]);
    printf("%d%d%d%d%d\n", numtemp[0], num[1], numtemp[2], numtemp[3], num[4]);
    printf("%d%d%d%d%d\n", num[0], numtemp[1], numtemp[2], numtemp[3], num[4]);
    printf("%d%d%d%d%d\n", numtemp[0], numtemp[1], numtemp[2], numtemp[3], num[4]);
    printf("%d%d%d%d%d\n", num[0], num[1], num[2], num[3], numtemp[4]);
    printf("%d%d%d%d%d\n", numtemp[0], num[1], num[2], num[3], numtemp[4]);
    printf("%d%d%d%d%d\n", num[0], numtemp[1], num[2], num[3], numtemp[4]);
    printf("%d%d%d%d%d\n", numtemp[0], numtemp[1], num[2], num[3], numtemp[4]);
    printf("%d%d%d%d%d\n", num[0], num[1], numtemp[2], num[3], numtemp[4]);
    printf("%d%d%d%d%d\n", numtemp[0], num[1], numtemp[2], num[3], numtemp[4]);
    printf("%d%d%d%d%d\n", num[0], numtemp[1], numtemp[2], num[3], numtemp[4]);
    printf("%d%d%d%d%d\n", numtemp[0], numtemp[1], numtemp[2], num[3], numtemp[4]);
    printf("%d%d%d%d%d\n", num[0], num[1], num[2], numtemp[3], numtemp[4]);
    printf("%d%d%d%d%d\n", numtemp[0], num[1], num[2], numtemp[3], numtemp[4]);
    printf("%d%d%d%d%d\n", num[0], numtemp[1], num[2], numtemp[3], numtemp[4]);
    printf("%d%d%d%d%d\n", numtemp[0], numtemp[1], num[2], numtemp[3], numtemp[4]);
    printf("%d%d%d%d%d\n", num[0], num[1], numtemp[2], numtemp[3], numtemp[4]);
    printf("%d%d%d%d%d\n", numtemp[0], num[1], numtemp[2], numtemp[3], numtemp[4]);
    printf("%d%d%d%d%d\n", num[0], numtemp[1], numtemp[2], numtemp[3], numtemp[4]);
    printf("%d%d%d%d%d\n", numtemp[0], numtemp[1], numtemp[2], numtemp[3], numtemp[4]);
}//end of main
#包括
#定义MAXNUM 5
#定义组合32
int main(){
int输入;
int num[MAXNUM];
int numtemp[MAXNUM];
int i;
printf(“请输入[0~99999]范围内的5个数字:\n”);
scanf(“%d”,输入(&I));
而(输入>99999 | |输入<0){
printf(“输入的号码不在指定的范围[0~99999],请输入新号码:\n”);
scanf(“%d”,输入(&I));
}//结束时
对于(i=4;i>=0;--i){
num[i]=输入%10;
输入/=10;
}//将num数组设置为输入数字的每一位
对于(i=0;i

numtemp
包含所有与
num
相反的值,并以这种方式打印32个组合。我想知道是否有人能想出一个更简单的解决办法。这是一个实验室作业,我得到了全部学分,但我想改进代码,这样它就不会有32条打印语句。感谢您的帮助

如果要显示所有可能的代码,则可以使用0到32之间的所有数字的二进制表示(使用
std::bitset
),然后显示每个对应的位,如下所示:

#include <iostream>
#include <bitset>
#include <string>

int main()
{
    const std::string letter{"ABCDE"};
    for(std::size_t i = 0; i < 32; ++i)
    {
        for(std::size_t j = 0; j < 5; ++j)
        {
            std::cout << letter[j] << std::bitset<5>(i)[j] << " ";
        }
    std::cout << std::endl;
    }
}
#包括
#包括
#包括
int main()
{
常量std::字符串字母{“ABCDE”};
对于(标准::大小\u t i=0;i<32;++i)
{
用于(标准尺寸j=0;j<5;++j)
{

STD:CUT在C++中。不,很好。他们读了1个5位数字,然后把它分成5个1位数字。但是如果数字不是5位,它就失败了。如果用户输入43,那么数组就会有联系。