當前位置:首頁 » 編程語言 » 魔術師要每位觀眾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