當前位置:首頁 » 編程語言 » c語言回合數是什麼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言回合數是什麼

發布時間: 2022-06-08 11:43:08

A. c語言54撲克問題

這個游戲要保證先手必勝,先手方只需要每次取牌以後讓剩餘的牌數為5的整數倍+1就可以了,這樣對手無論如何都只能拿到最後一張。以下代碼VS2019測試通過。

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

// 電腦取牌,返回張數 1~4
int ComputerChoice(int CardsRemain);

// 人取牌,返回張數 1~4
int HumanChoice(int CardsRemain);

// 游戲函數
void Game(int CardsRemain, bool HumanFirst);

void main()
{
int CardsRemain; // 剩餘張數
bool HumanFirst; // 人先拿 或 電腦先拿
char c = '/0'; // 先手選擇

// 顯示游戲規則
printf("游戲規則:\n\n");
printf("54張牌,人和電腦輪流抽,1到4張任選,抽到最後一張牌者敗。\n\n");
printf("按任意鍵繼續...\n");
getch();

while (1)
{
CardsRemain = 54;

// 確定誰先拿牌
while (1)
{
system("cls");
printf("\n讓電腦先拿牌嗎?(Y/N)");
c = getch();
if ((c == 'Y') || (c == 'y'))
{
HumanFirst = false;
break;
}
if ((c == 'N') || (c == 'n'))
{
HumanFirst = true;
break;
}
}
// 開始游戲
Game(CardsRemain, HumanFirst);
getch();
// 再來一次?
while (1)
{
system("cls");
printf("\n\n不服!再來一次?(Y/N)");
c = getch();
if ((c == 'Y') || (c == 'y'))
break;
if ((c == 'N') || (c == 'n'))
return;
}
}
}

// 電腦取牌
int ComputerChoice(int CardsRemain)
{
int i;

// 拿掉n張,使得剩下張數為 5 的整數倍+1,必勝
switch (CardsRemain % 5)
{
case 1:
while (1) // 拿不到最佳張數,就在 1~4 張之間隨機拿, 要確保電腦所拿張數不大於剩餘張數
{
i = rand() % 4 + 1;
if (i <= CardsRemain)
return i;
}
case 0: return 4;
default: return (CardsRemain % 5) - 1;
}
}

// 人取牌
int HumanChoice(int CardsRemain)
{
int i;

while (1)
{
printf("\n請輸入要拿掉的張數[1~4]:");
scanf("%d", &i);
if (i > CardsRemain)
continue;
if ((i >= 1) && (i <= 4))
return i;
}
}

// 游戲函數
void Game(int CardsRemain, bool HumanFirst)
{
int LastComChoice = 0; // 電腦 上輪拿牌張數
int LastManChoice = 0; // 人 上輪拿牌張數
int Rounds = 0; // 回合數
bool HumansTurn = HumanFirst; // 本輪取牌者是 人 還是 電腦。初始值由 HumanFirst 決定

// 初始化隨機數
srand(time(0));

system("cls");

// 取牌循環,直到剩下張數為 1
while (CardsRemain > 0)
{
if (HumansTurn) // 輪到人拿牌
{
// 想讓電腦互P,把這里 HumanChoice 改成 ComputerChoice, 相應輸出文字改成電腦1、2就可以了。
LastManChoice = HumanChoice(CardsRemain);
CardsRemain -= LastManChoice;
printf("\n你拿走 %d 張,剩 %d 張。\n", LastManChoice, CardsRemain);
if (CardsRemain == 0)
{
printf("\n\n你拿到最後 1 張牌,你輸了! 按任意鍵結束游戲...");
getch();
return;
}
}
else // 輪到電腦拿牌
{
LastComChoice = ComputerChoice(CardsRemain);
CardsRemain -= LastComChoice;
printf("\n電腦拿走 %d 張,剩 %d 張。\n", LastComChoice, CardsRemain);
if (CardsRemain == 0)
{
printf("\n\n電腦拿到最後 1 張牌,電腦負! 按任意鍵結束游戲...");
getch();
return;
}
}

HumansTurn = !HumansTurn; // 更換拿牌者
Rounds++;

if ((Rounds % 2) == 0) // 雙方各取一次牌為 1 回合
{
if (HumanFirst)
printf("\n第 %d 輪, 人類:%d張 電腦:%d張 剩下:%d張\n", Rounds / 2, LastManChoice, LastComChoice, CardsRemain);

else
printf("\n第 %d 輪, 電腦:%d張 人類:%d張 剩下:%d張\n", Rounds / 2, LastComChoice, LastManChoice, CardsRemain);

printf("--------------------------------------------------\n");
}
}
}

B. C語言:為什麼每次產生的rand隨機數全都一樣例如第一個是9,後面全都是9

/*

Enter the number of sets: enter q to stop.

5 9

How many sides and how many dice:3

Here are 5 sets of 3 9-sided throws.

25 18 14 13 17

How many sets? Enter q to stop.

q

Press any key to continue

*/

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

intdiceroll(intnum,intside);//返回骰子產生的數字的總和

intmain(void){
intsets,side,dice;//sets為回合數,side面,dice:骰子個數
inti;//變數初始化
srand((unsigned)time(NULL));//應在main()初始化隨機數種子
printf("Enterthenumberofsets:enterqtostop. ");//set組
while(scanf("%d",&sets)==1&&sets>0){
printf("Howmanysidesandhowmanydice:");
if(scanf("%d%d",&side,&dice)==2){
printf("Hereare%dsetsof%d%d-sidedthrows. ",sets,dice,side);
for(i=0;i<sets;i++)//0-sets個回合
printf("%d",diceroll(side,dice));//列印出返回值
printf(" ");
printf("Howmanysets?Enterqtostop. ");
}
elseprintf("inputside,anddice: ");
}
return0;
}

intdiceroll(intside,intdice){
inti,sum;
for(i=0,sum=0;i<dice;i++)
sum+=rand()%side+1;//產生3個骰子搖出的總和sum
returnsum;//返回3個骰子搖出的總數sum
}

C. C語言編程迴文數

main()
{
int x,n,i,j,a[20],c;
long sum;
scanf("%d",&n);
for (x=1;x<=n;x++)
{ sum=x*x;
for(i=1;i<20;i++)
a[i]=0;
for (i=1;i<20;i++)
{a[i]=sum%10;
sum=sum/10;
if (sum==0) break;
}
if (i%2==0) {c=0; for (j=1;j<=i/2;j++) {if(a[j]!=a[i+1-j]) c=1;}
if (c==0){printf("%d %d\n",x,x*x);}}
else {c=0; for (j=1;j<=(i-1)/2;j++) {if (a[j]!=a[i+1-j]) c=1;}
if (c==0){printf("%d %d\n",x,x*x);}}
}
}

D. C語言中常說的返回值是指什麼返回數值

函數的返回值有很多類型。我們先大略了解一下函數
函數,在英文版c中為「funtion」,意思是「功能」。
一個函數的目的是實現某一個功能。函數的作用是處理數據。
不同函數有不同的返回值。
我們把洗衣機和電飯鍋,洗衣機給我們的返回值是干凈的衣服,電飯鍋給我們的返回值是飯。
有些函數還需要參數值,對這些數值進行處理。
比如洗衣機需要我們傳的參數是臟衣服。電飯鍋需要我們傳的參數是生米、水。
函數可以是我們自己編寫的,也可以是c語言開發者已經幫我們編寫好的。
我們自己寫的比如
int
max(int
x,int
y)
{
return
x:y?x>y;
}
這個函數作用是挑出兩個數中的最大的那個數並返回,類型是int;
C語言開發者提供的比如float
sqrt(float
n);這個函數作用是求開方,返回一個開方值,類型是float;

E. 請問C語言中的返回值是什麼意思,為什麼要有返回值,解釋一下,越通俗易懂越好!

所謂返回值,函數才有,就類似於數學中的函數的概念f(x),其實跟數學概念一開始是一個意思,你傳入一個值x,經過處理,然後返回處理的結果,處理的結果就叫做返回值。

就好像你拿原材料做衣服,需要拿材料到工廠裡面加工,工廠就生產出衣服給你,衣服就是返回值。
這其實跟數學中函數的概念是一樣的。

當然不是所有函數都有返回值,如一些函數只要完成某些特定的功能即可,不需要返回特定的值給主函數。如C語言中的printf這個方法,有些時候只希望屏幕輸出一段加工過的文字,這就可以放在子函數中處理,而不需要將處理結果返回給主函數再處理,能夠節省代碼量。

又如一些多線程的函數,很多都是沒有返回值。具體情況具體分析。。。

F. c語言里的 迴文數是什麼

就是左右到中間加起來一樣的數
如 12321,4004

G. 編寫一段C語言與匯編程序的回合程序,用匯編程序實現兩個64位數的加法運算,在C文件中調用該函數。

是:
#include <stdio.h>
#include <stdlib.h>
int main();
{
int a,b,c;
scanf("%d %d",a,b);//輸入a和b的值。
c=a+b;//c是兩數之和。
printf("%d",c);//輸出c的值。
system("pause");
return 0;
}

H. C語言問題

6月9日 09:30 第一個問題,x[3][4]是一個二維數組,所以要用兩重星號,你可以這么理解,*(x+1)是第一行的行首地址,也就是說,它相對於一個數組y[4]={5,6,7,8}的首地址,那麼*(*(x+1))就是這個y[4]的首個元素了,也就是5,即x[1][0]的值

這樣說一下,答案A也就很好理解了,首先*(x+1)的值是二維數組第1行(從0開始計數)的首地址,然後*(x+1)+1就是二維數組第1行第1列的地址,再取一個*就變成了該地址中的內容,即x[1][1]為6

總結一下就是,n維數組,就需要取n重星號,每取一重星號就降一維,但是注意除非取了n重星號,否則前面的1到n-1重星號得到的都是地址值,也可以勉強理解為該維的首元素地址

第二個問題,你這種寫法是錯誤的,因為p是一個指向struct sk的指針,不應該強制轉成指向整型的指針,除非你非有這樣做的理由。

下面的論述僅在你非要這樣強制轉換時成立:

data.n是一個整型變數(int),所謂的用指針指向它,其實可以理解為把一個指針型變數的值賦為data.n的地址,這樣我們通過&data.n首先獲取了n的地址。
這里存在一個問題,因為指針賦值要求是同類型的,也就是,一般意義下,一個int*的指針只能指向int型的數據,一個doulbe*的指針只能指向double型的數據,同樣,一個stack sk *型的指針也只能指向stack sk型的數據,所以,這里如果直接賦值是不行的,必須要把int *強制轉換成stack sp *,所以就有了你上面的賦值公式

I. C語言的發展及其特點

C 語言特點
C語言是一種成功的系統描述語言,用C語言開發的UNIX操作系統就是一個成功的範例;同時C語言又是一種通用的程序設計語言,在國際上廣泛流行。世界上很多著名的計算公司都成功的開發了不同版本的C語言,很多優秀的應用程序也都使用C語言開發的,它是一種很有發展前途的高級程序設計語言。 1. C是中級語言。它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作, 而這三者是計算機最基本的工作單元。 2.C是結構式語言。結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。 3.C語言功能齊全。具有各種各樣的數據類型,並引入了指針概念,可使程序效率更高。而且計算功能、邏輯判斷功能也比較強大,可以實現決策目的的游戲。 c語言
4. C語言適用范圍大。適合於多種操作系統,如Windows、DOS、UNIX等等;也適用於多種機型。 C語言對編寫需要硬體進行操作的場合,明顯優於其它解釋型高級語言,有一些大型應用軟體也是用C語言編寫的。 C語言具有較好的可移植性,並具備很強的數據處理能力,因此適於編寫系統軟體,三維,二維圖形和動畫。它是數值計算的高級語言。 常用的C語言IDE(集成開發環境)有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++,Borland C++ Builder,GNU DJGPP C++,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc 等等…… c語言的學習 對於一個初學者,Microsoft Visual C++是一個比較好的軟體。界面友好,功能強大,調試也很方便。這是微軟出的一個C語言集成開發環境(IDE),主要有:VC++6.0、VS2005、VS2008、VS2010等,分為企業版和學生版等。對於初學者VC++6.0是比較容易上手的,但由於其對標准支持的不好可能使人養成不良編程習慣,因此論壇上也有人主張舍棄VC++6.0。 在unix/linux操作系統上,學習c語言一般使用vim/emacx來編輯源文件,使用gcc/cc來編譯源文件,使用make程序來管理編譯過程。
編輯本段發展歷史
c語言
C語言的祖先是BCPL語言。 1967年,劍橋大學的Martin Richards 對CPL語言進行了簡化,於是產生了BCPL(Basic Combined Pogramming Language)語言。 1970年,美國貝爾實驗室的Ken Thompson。以BCPL語言為基礎,設計出很簡單且很接近硬體的B語言(取BCPL的首字母)。並且他用B語言寫了第一個UNIX操作系統。 在1972年,美國貝爾實驗室的D.M.Ritchie在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。 為了使UNIX操作系統推廣,1977年Dennis M.Ritchie 發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。 1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。同時由B.W.Kernighan和D.M.Ritchie合著 c語言程序設計
了著名的《The C Programming Language》一書。通常簡稱為《K&R》,也有人稱之為《K&R》標准。但是,在《K&R》中並沒有定義一個完整的標准C語言,後來由美國國家標准化協會(American National Standards Institute)在此基礎上制定了一個C語言標准,於一九八三年發表。通常稱之為ANSI C。 K&R第一版在很多語言細節上也不夠精確,對於pcc這個「參照編譯器」來說,它日益顯得不切實際;K&R甚至沒有很好表達它所要描述的語言,把後續擴展扔到了一邊。最後,C在早期項目中的使用受商業和政府合同支配,它意味著一個認可的正式標準是重要的。因此(在M. D. McIlroy的催促下),ANSI於1983年夏天,在CBEMA的領導下建立了X3J11委員會,目的是產生一個C標准。X3J11在1989年末提出了一個他們的報告[ANSI 89],後來這個標准被ISO接受為ISO/IEC 9899-1990。 1990年,國際標准化組織ISO(International Organization for Standards)接受了89 ANSI C 為I SO C 的標准(ISO9899-1990)。1994年,ISO修訂了C語言的標准。 1995年,ISO對C90做了一些修訂,即「1995基準增補1(ISO/IEC/9899/AMD1:1995)」。1999年,ISO有對C語言標准進行修訂,在基本保留原來C語言特徵的基礎上,針對應該的需要,增加了一些功能,尤其是對C++中的一些功能,命名為ISO/IEC9899:1999。 2001年和2004年先後進行了兩次技術修正。 目前流行的C語言編譯系統大多是以ANSI C為基礎進行開發的,但不同版本的C編譯系統所實現的語言功能和語法規則有略有差別。

J. C語言中,什麼是迴文數

迴文數"迴文數"是一種數字.如:98789, 這個數字正讀是98789,倒讀也是98789,正讀倒讀一樣,所以這個數字
就是迴文數.
任意某一個數通過以下方式相加也可得到
如:29+92=121 還有 194+491=586,586+685=1271,1271+1721=2992
不過很多數還沒有發現此類特徵(比如196,下面會講到)
另外個別平方數是迴文數
1的平方=1
11的平方=121
111的平方=12321
1111的平方=1234321




依次類推
3×51=153
6×21=126
4307×62=267034
9×7×533=33579
上面這些算式,等號左邊是兩個(或三個)因數相乘,右邊是它們的乘積。如果把每個算式中的「×」和「=」去掉,那麼,它們都變成迴文數,所以,我們不妨把這些算式叫做「迴文算式」。還有一些迴文算式,等號兩邊各有兩個因數。請看:
12×42=24×21
34×86=68×43
102×402=204×201
1012×4202=2024×2101
不知你是否注意到,如果分別把上面的迴文算式等號兩邊的因數交換位置,得到的仍是一個迴文算式,比如:分別把「12×42=24×21」等號兩邊的因數交換位置,得到算式是:
42×12=21×24
這仍是一個迴文算式。
還有更奇妙的迴文算式,請看:
12×231=132×21(積是2772)
12×4032=2304×21(積是48384)
這種迴文算式,連乘積都是迴文數。
四位的迴文數有一個特點,就是它決不會是一個質數。設它為abba,那它等於a*1000+b*100+b*10+a,1001a+101b。能被11整除。
六位的也一樣,也能被11整除
還有,人們藉助電子計算機發現,在完全平方數、完全立方數中的迴文數,其比例要比一般自然數中迴文數所佔的比例大得多。例如11^2=121,22^2=484,7^3=343,11^3=1331,11^4=14641……都是迴文數。
人們迄今未能找到五次方,以及更高次冪的迴文數。於是數學家們猜想:不存在nk(k≥5;n、k均是自然數)形式的迴文數。
在電子計算器的實踐中,還發現了一樁趣事:任何一個自然數與它的倒序數相加,所得的和再與和的倒序數相加,……如此反復進行下去,經過有限次步驟後,最後必定能得到一個迴文數。
這也僅僅是個猜想,因為有些數並不「馴服」。比如說196這個數,按照上述變換規則重復了數十萬次,仍未得到迴文數。但是人們既不能肯定運算下去永遠得不到迴文數,也不知道需要再運算多少步才能最終得到迴文數。