给定五组数字,判定生日日期在哪一天(算命)
五组数据
第一组
1 3 5 7
9 11 13 15
17 19 21 23
25 27 29 31
第二组
2 3 6 7
10 11 14 15
18 19 22 23
26 27 30 31
第三组
4 5 6 7
12 13 14 15
20 21 22 23
28 29 30 31
第四组
8 9 10 11
12 13 14 15
24 25 26 27
28 29 30 31
第五组
16 17 18 19
20 21 22 23
24 25 26 27
28 29 30 31
玩家依次说明自己的生日是否在这五组数据中,即可判断准确生日。
原理:每组数对应二进制每一位为1的数字(第n组数的二进制的第n位就是1),所以根据该数是否在每一组中即可判断具体是哪个数字。
在第一组中 +1,没在则加0
在第一组中 +2,没在则加0
在第一组中 +4,没在则加0
在第一组中 +8,没在则加0
在第一组中 +16,没在则加0
代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main(){
int input;
int ret = 0;
printf("根据提示说明你的生日(或自己想一个1-31之间的数字)是否在以下五张表中,系统自动生成你的生日(1-31)\n");
printf("输入任意(数字)键进行下一步:\n");
scanf("%d", &input);
system("cls");
while (1)
{
printf(" 1 3 5 7\n");
printf(" 9 11 13 15\n");
printf("17 19 21 23\n");
printf("25 27 29 31\n");
printf("你的生日(或想得那个0-31的数字)在这张表上吗?请输入1表示在,0表示不在\n");
scanf("%d", &input);
if (input == 1){
ret += 1;
break;
}
else if (input == 0){
ret += 0;
break;
}
else{
printf("请输入正确信息:\n");
}
}
system("cls");
while (1)
{
printf(" 2 3 6 7\n");
printf("10 11 14 15\n");
printf("18 19 22 23\n");
printf("26 27 30 31\n");
printf("你的生日(或想得那个0-31的数字)在这张表上吗?请输入1表示在,0表示不在\n");
scanf("%d", &input);
if (input == 1){
ret += 2;
break;
}
else if (input == 0){
ret += 0;
break;
}
else{
printf("请输入正确信息:\n");
}
}
system("cls");
while (1)
{
printf(" 4 5 6 7\n");
printf("12 13 14 15\n");
printf("20 21 22 23\n");
printf("28 29 30 31\n");
printf("你的生日(或想得那个0-31的数字)在这张表上吗?请输入1表示在,0表示不在\n");
scanf("%d", &input);
if (input == 1){
ret += 4;
break;
}
else if (input == 0){
ret += 0;
break;
}
else{
printf("请输入正确信息:\n");
}
}
system("cls");
while (1)
{
printf(" 8 9 10 11\n");
printf("12 13 14 15\n");
printf("24 25 26 27\n");
printf("28 29 30 31\n");
printf("你的生日(或想得那个0-31的数字)在这张表上吗?请输入1表示在,0表示不在\n");
scanf("%d", &input);
if (input == 1){
ret += 8;
break;
}
else if (input == 0){
ret += 0;
break;
}
else{
printf("请输入正确信息:\n");
}
}
system("cls");
while (1)
{
printf("16 17 18 19\n");
printf("20 21 22 23\n");
printf("24 25 26 27\n");
printf("28 29 30 31\n");
printf("你的生日(或想得那个0-31的数字)在这张表上吗?请输入1表示在,0表示不在\n");
scanf("%d", &input);
if (input == 1){
ret += 16;
break;
}
else if (input == 0){
ret += 0;
break;
}
else{
printf("请输入正确信息:\n");
}
}
system("cls");
printf("你的生日(或数字)是:%d\n", ret);
return 0;
}