gpt4 book ai didi

c - 编写打印出排列的程序

转载 作者:行者123 更新时间:2023-11-30 17:15:45 25 4
gpt4 key购买 nike

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

示例:

按钮A:1 2

按钮 B:3 4

按钮 C:5 6

按钮 D:7 8

按钮E:9 0

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

例如:

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

代码 1 4 4 4 1 将使用与代码 1 3 3 3 2 相同的按钮模式输入(模式 = 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

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;
}
}

如果您使用 C,则将 std::string 替换为 const char* 并编写您自己的位转换例程。

关于c - 编写打印出排列的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29881301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com