当前位置:首页 » 编程语言 » 魔术师要每位观众c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

魔术师要每位观众c语言

发布时间: 2022-07-17 05:14:57

1. c语言在一种室内游戏中,魔术师要每位观众心里想一个三位数abc,然后魔术师让观众心中记下acb

#include<stdio.h>

voidmain()
{
inta,b,c,tmp=0,tmp2;//tmp:计算结果tmp2:输入和
scanf("%d",&tmp2);//570420

for(a=0;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
{
tmp=a*100000+b*10000+c*1000+a*100+b*10+c;
tmp=tmp+b*100+a*10+c;
tmp=tmp+b*100+c*10+a;
tmp=tmp+c*100+a*10+b;
tmp=tmp+c*100+b*10+a;
if(tmp==tmp2)
{
printf("%d%d%d ",a,b,c);
}

}
printf("ok ");
}

2. C语言实例 魔术师的猜牌术(1)

这个问题你想让别人一步一步帮你递推演示,要累死人的。不仅解释的人累,大段大段的无聊文字你看着都累。
很多程序题目最主要的是理解实现过程,只要过程理解了,程序自己也可以写出来。

我帮你点拨一下吧。
首先,你可以把答案打印出来,照着答案自己循环数一下,通过这个过程,把每个数字到底是怎么出来的搞明白。
数据如下:1 8 2 5 10 3 12 11 9 4 7 6 13
然后开始数:先是1;再数2个是2;再数3个是3;……;数到4要数5的时候,7(1)、6(2)、13(3)、1(跳掉)、8(4)、2(跳掉)、到了,填5;……
明白了吗?
程序中n就是刚才括号里数的东西,a[j]就是刚才数的7,6,13……(程序运行的时候这些不用跳掉的数字还没有赋值,都是0),现在应该能明白了吧。
整个do-while语句内实现的就是刚才数的过程,j碰到结尾就从头开始。j碰到需要跳掉的时候就j++,否则就j++;n++,直到n==i。

补充一些基础知识:
(1)全局变量int a[14];运行前全部是0。
(2)if(a[j]),0的话就是false,赋过值了就是true。

其实这个程序写得不是非常有条理(不过执行效率不错),初学者读起来有点困难。想方便阅读的话,可以让n从0开始。n++以后再判断n==i。我帮你写个可读性强点的程序吧,读完我的再读他的,应该方便很多。

#include<stdio.h>
int a[14]={0};//显式地赋0值
int main()
{
int i,n,j=1;
printf("The original order of cards is:");
for(i=1;i<=13;i++)
{
n=0;
while(n!=i){//换成do-while也一样
if(a[j]==0){//如果位置空,n就计数
n++;
if(n==i)//到了,赋值
a[j]=i;
}
j=j==13?1:j+1;//j一直计数
}
}
for(i=1;i<=13;i++)
printf("%d ",a[i]);
printf("\n");
}

3. 请用C语言根据下面的数学魔术原理编写一个小游戏。

这个程序我昨晚就搞定了,结果掉线上不成网没贴上来,等我早上起来就给你回答。

搞定。

#include<stdio.h>
#define N 16
main()
{
int i;
int j;
char ch;
int number=0;
int a[5][N]={{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}};
for(i=0;i<5;i++)
{
printf("%d\t",i+1);
for(j=0;j<N;j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("告诉你所想的数字所在的行:\n");
for(i=1;i<6;i++)
{
printf("你所想的数字在%d 行(Y/N)?",i);
ch=getchar();getchar();
if(ch=='y'||ch=='Y')
number+=1<<(i-1);
}
printf("你所想的数字是:%d.\n",number);
getch();
}

4. c语言魔术师猜牌

//在本程序中,以a[1]~a[26]顺序记录原来的牌面,以自增的变量i记录黑桃A,2,。。。K,红桃A,2,。。。K;

#include<stdio.h>
int a[27];
int main(){
int i,n,j=1;
a[1]=1; //a[1]记录第一张牌,显然为黑桃A;
printf("The original order of cards is:(r:red b:black):\n");
for(i=2;i<=26;i++){ //循环变量i,i对应唯一的牌面;
n=1; //n赋值为1,与下文 while(n<=3)呼应;
do{
if(j>26) //j>26是,值改变为1;
j=1;
if(a[j]) //如果a[j]已记录牌面,j自增1,使a[j]下移记录下一张牌面,否则,执行else语句;
j++;
else{
if(n==3) //当n等于3时,a[j]记录牌面i;
a[j]=i;
j++; //j自增1;
n++; //n自增1;
}
}while(n<=3); //当n<=3是继续do while ,否则,退出do while;
}
for(i=1;i<=26;i++){ //以原来的次序输出牌面;
printf("%c",a[i]>13? 'r':'b');
printf("%d ",a[i]>13? a[i]-13:a[i]);
if(i==13)
printf("\n");
}
printf("\n");
}

5. 在一种室内互动游戏中,魔术师要每位观众心里想一个3位数abc(a.b.c分别是百位.十位和个位数字),

#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<math.h>
#include<stdlib.h>
//函数的声明
void magician();
void decision();
void mainmenu();
void exitgame();
void hellp();
void playerchoice();

void mainPage()//主界面
{
int i;
printf("\t______vvvvvv______系统正在加载中,请稍等......______vvvvvv______\t\n");
printf("\t—__— zzzzzzzzzzz电脑不给力,请稍等一会......—__—zzzzzzzzzzzz\t\n");
for(i=0;i<80;i++)
{
printf("%%");
Sleep(200);

}
printf("\t\t\t—— 终于结束了╮(╯▽╰)╭\t\t\t\n");
system("CLS");
system("color 8B");
printf(" *****************************************************************\n");
printf(" *******************************************************************\n");
printf(" ** **\n");
printf(" ** **\n");
printf(" ** 第五组 **\n");
printf(" ** 成员:林可、王丽婕、张婷婷、许春雪、 **\n");
printf(" ** 裴月娥、钱鹏辰 **\n");
printf(" ** **\n");
printf(" ** **\n");
printf(" *******************************************************************\n");
printf(" *****************************************************************\n");

}

int a;
int b;
int c;
int sum;//计算的和值
int e;//三位数的值

void main ()//主函数
{
mainPage();
mainmenu();

}
/*acb+bca+bac+cab+cba+abc=sum-abc
222(a+b+c)=sum-abc
本代码的核心思想
*/

void mainmenu()//系统主菜单
{
int select;

while(1)
{
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%%Main Menu%%%%%%%%%%%%%%%%%%%%%%%%\n");

printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Menu@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
printf("\t 1 退出\n");
printf("\t 2 进入游戏\n");
printf("\t 3 游戏帮助\n");
printf("请输入相应的数字,进入不同的模块: \n");
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
scanf("%d",&select);
getchar();
fflush(stdin);
if(select==1)
{
exitgame();
}
else if(select==2)
{
playerchoice();
}
else if(select==3)
{
hellp();
}
else
{
printf("选择非法,请重新输入进行再次选择\n");
}
}
}
void viewer()//玩家是观众
{
int sum;//键盘输入的和值
int e;//得出的三位数
int f;
int g;
int m;
printf("请输入得到的数:\n");
scanf("%d",&sum);
e=222-sum%222;
a=e/100;
b=(e/10)%10;
c=e%10;

g=a+b+c;
f=e+(222*g);
if (f==sum)
printf("%d\n",e);
else
{
if(sum%222==0)
{
m=(sum/222)/5;
e=222*m;
printf("%d\n",e);
}
else
{
e=e+222;
a=e/100;
b=(e/10)%10;
c=e%10;
f=e+(222*g);
printf("%d\n",e);
}
}

}
void playerchoice()//选择玩家的身份
{
int select;
printf(" 输入 1 你是魔术师 \n");
printf(" 输入 2 你是观众 \n");
printf("请输入相应的数字,进入不同的模块: \n");
scanf("%d",&select);
getchar();
fflush(stdin);
if(select==1)
{
magician();
}
else if(select==2)
{
viewer();
}
else
{
printf("选择非法,请重新输入进行再次选择\n");
}

}
void hellp()
{
system("CLS");
printf("$$$$$$$$$$$$$$$$$$欢 迎 寻 求 帮 助$$$$$$$$$$$$$$$$\n");
printf("\n");
printf("@@@@游戏规则:输入1,表示退出游戏 @@@\n");
printf("@@@@ 输入2,表示游戏系统设置 @@@\n");
printf("@@@@ 输入3,表示游戏帮助 @@@\n");
printf("@@@@ 输入4,表示游戏开始 @@@\n");
printf("输入2时,进行下一轮选择:\n");
printf(" 输入1 你是魔术师 \n");
printf(" 输入2 你是观众 \n");
printf("\n");
printf("!!!!!!!!!!!!游 戏 简 要 说 明!!!!!!!!!!!!!\n");
printf("\n");
printf(" 在一种室内互动游戏中,魔术师要每位观众心里想一个3位数abc(a.b.c分别是百位.十位\n");
printf("和个位数字),然后魔术师让观众心中记下acb bac bca cab cba 5个数以及这5个数的和值。\n");
printf("只要观众说出这个和值多少,则魔术师一定能猜出观众心里想的原数abc是多少。\n");
printf("\n");
printf("本游戏玩家自由选择所担任的职业,即魔术师或观众,根据提示完成游戏\n");
printf("$$$$$$$$$$$$$$$$$$结 束 帮 助$$$$$$$$$$$$$$$$$$$$$\n");

}
void exitgame() //退出
{
char select;
printf("你确定退出游戏吗?退出请输入Y或y,继续点任意键\n");
scanf(" %c",&select);
getchar();
fflush(stdin);
if(select=='Y'||select=='y')
{
printf("欢迎再来游戏\n");

exit(1);
}
else
{
return;
}
}
void magician()//玩家是魔术师
{
int l,f;
srand(time(0));
a=rand()%9+1;
b=rand()%10;
c=rand()%10;
e=100*a+10*b+c;
//acb+bac+bca+cab+cba=122a+212b+211c=f
f=122*a+212*b+221*c;
printf("%d\n",f);
printf("请输入你得到的三位数: \n");
scanf("%d",&l);
if (e==l)
printf("恭喜你,魔术成功了 \n");
else
printf("魔术失败了,下次努力\n");
}

6. 魔术师表演前需要铺垫个包袱

或 用数学方法来说就是并集 也就是A或B有三种可能 A,B,A和B
同理 魔术师的话说完后 不管他喊的是哪个,抽的牌只要是红桃K 梅花Q 两个中的一张就是对的

7. 魔术师为大家表演魔术.他请观众想一个数,然后将这个数按以下步骤操作:魔术师立刻说出观众想的那个数.

解:(1)[(﹣1)×3﹣6]÷3+7=4;
(2)设小聪想到的数是x,
则根据题意得:(3x﹣6)÷3+7=93,
解得:x=88;
(3)设观众想的数为a.则
因此,魔术师只要将最终结果减去5,就能得到观众想的数了.

8. c语言在一种室内游戏中,魔术师要每位观众心里想一个三位数abc,然后魔术师让观众心中记下acb.b

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

intMagic(intm);
intTput(inta,intb,intc);

main()
{
intm;//观众求出的五个数的和
intM;//魔术师算出的三位数

scanf("%d",&m);
M=Magic(m);


if(M==99)//循环过后,所有三位数都不符合
printf("Thesumyoucalculatediswrong! ");
else
printf("Thenumberis%d ",M);

system("pause");
}

//函数功能:输出观众心里的三位数
intMagic(intm)
{
inta,b,c;//分别储存循环中三位数的百十个位
inti;//循环变量
ints;//储存循环中计算的和

//循环遍历每一个三位数
for(i=999;i>99;i--)
{
//分离每个三位数
a=i/100;
b=i%100/10;
c=i%10;

s=Tput(a,c,b)+Tput(b,a,c)+Tput(b,c,a)+Tput(c,a,b)+Tput(c,b,a);

if(s==m)
break;
}
returni;
}

//函数功能:输入百十个位,输出一个三位数
intTput(inta,intb,intc)
{
returna*100+b*10+c;
}

9. 一位魔术师让观众写下一个六位数a,并将a的各位数字相加得b,他让观众说出a-b中的5

题目应该是:一位魔术师让观众写出一个六位数a,并将a的各位数码相加得,他让观众说出a-b这个六位数中的5个数码,观众报出1、3、5、7、9,魔术师便说出余下的那个数码,那么魔术师说出的那个数码是( )

解析:假设原6位数形如ABCDEF
它表示
这个数在十万位上的数值是A,也就是含有A个100000;
这个数在万位上的数值是B,也就是含有B个10000;
…………
那个这个6位数实际的值是 100000A+10000B+1000C+100D+10E+F
这个6位数的各数码相加就是(A+B+C+D+E+F)
那么a-b就等于
100000A+10000B+1000C+100D+10E+F-(A+B+C+D+E+F)
=99999A+9999B+999C+99D+9E
=9x(11111A+1111B+111C+11D+E)
这表示a-b的结果一定是9的倍数
凡是9的倍数,各个数位的数字的和一定是9的倍数 (譬如:27,2+7=9;108,1+0+8=9;3663,3+6+6+3=18)
因此,余下的那个数码就是可以和25相加凑成9的倍数的数字 (1+3+5+7+9=25)
这个数字是2