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

c語言報數游戲實例

發布時間: 2023-02-13 18:12:45

『壹』 c語言,兩個人輪流報數,從1開始依次報數,每人每次只能報1個數或2個數,誰先報到30誰獲勝,

邏輯沒看。

你既然用到time函數,頭文件應該導入time.h.

建議少用goto,按照你的代碼結構,可以簡化。以下參照你的代碼改的:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#definemaxNum30//最大叫數值
intCg(intc);
intHg(intc);
intRn();
intmain()
{
intc=0,n;
while(1)
{
printf("請選擇誰先叫數(1、玩家;2、電腦):");
scanf("%d",&n);
if(n!=1&&n!=2)
printf("輸入錯誤,重新輸入! ");
else
break;
}

while(c<30)
{
switch(n)
{
case1:c=Hg(c);break;
case2:c=Cg(c);break;
}
}

return0;
}
intRn()
{
inta;
srand(time(NULL));
a=rand()%2+1;
returna;
}
intHg(intc)//玩家叫數返回叫數後的累加值參數:c累加值
{
inti=1,n;
while(1)//輸入驗證
{
printf("玩家回合,請輸入叫數次數(1或者2):");
scanf("%d",&n);
if(n!=1&&n!=2)
printf("輸入錯誤,重新輸入! ");
else
break;
}

while(n--)
{
printf("玩家第%d次叫數:%d ",i++,++c);
if(c==maxNum)
{
printf("玩家首先叫到30,玩家勝利!! ");
returnc;
}
}
c=Cg(c);
returnc;
}
intCg(intc)//電腦叫數返回叫數後的累加值參數:c累加變數指針,隨機值
{
inti=1,a=Rn();
printf("電腦回合,電腦叫數次數:%d ",a);
while(a--)
{
printf("電腦第%d次叫數:%d ",i++,++c);
if(c==maxNum)
{
printf("電腦首先叫到30,電腦勝利!! ");
returnc;
}
}
c=Hg(c);
returnc;
}

另外:如果將累加變數c寫成公共變數,或者在main中定義c,然後傳址,代碼還會更簡化。

『貳』 C語言:報數游戲。A,B,C,D,E,F,G,H共八人站成一排,A=0,然後報到H=8,在G=9依次下去,問誰先報到123456

不知道有沒有懂你的意思,,,假如A=0; H應該報到7啊,,,反過來G報8啊~~~
簡單思路:
char man[] = {"ABCDEFGHGFEDCB"};//假如是{"ABCDEFGHHGFEDCBA"},H就會報兩次到8
unsigned i, count;

for (i=0, count = 0; i=(i+1)%14)//i=(i+1)%14的作用是讓i在0~13循環
{
count++;
if (count == 123456)
{break;}
}

printf("%c", man[i]);

『叄』 用c語言編程

#include<stdio.h>
intn=10,s=1,m=4,out,a[11];/*n為所有人數,out為出局的人*/
voidjosegh();
intmain()
{inti;
for(i=1;i<=n;i++)/*定義數組a,按順序賦值*/
a[i]=i;
while(n!=0)
josegh();
return0;
}
voidjosegh()/*每當出局一個人,n減1,數組重新排列*/
{out=s+m-1;
while(out>n)
out-=n;
printf("%d",a[out]);
n--;
s=out;
for(;out<=n;out++)
a[out]=a[out+1];
}

『肆』 C語言編程:十三個小孩圍成圈做游戲 從第3個人開始循環報數,報數為5者出圈,接著重新報數,求出圈

循環隊列,隊尾下一個元素指向隊首。從隊首開始模擬整個過程,用一個數組記錄出圈的元素,直到隊列里只剩下2個元素。

『伍』 C語言 有n個人圍成一圈,按順序從1到n編號。從第一個人開始報數,報數3的人退出圈子

#include <stdio.h>
#define N 9999
int main()
{
int n,a[N],*p,i=0,out=0,count=0;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n>=10000)
printf("n is out of range of valid values.");改為printf("%d is out of range of valid values.",n);
else
{
for(i=0;i<=n;i++) 改為a[i]=i;
a[i+1]=i; //這樣做a[0]是個不確定的值,執行完p=a;後*p
p=a; 的值也是不確定的,後面的if判斷條件不確定了
while(out!=n){ 這兒應該是out!=n-1吧
if(*p!=0) 這段可以改成這樣for(;;){ if(*p!=0){
count++; count++;p++;}結束if
if(count==3){ if(count==3){ out++; out++;
*p=0; *p=0; break;}結束if
} }結束for
count=0; //此處導致count永遠只能是0或1所以out的值不會變
把這兒的p++刪了 p++; while就成死循環了
if(*p==a[n-1]) 把這個if語句嵌套到if(*p!=0)里的p++後面這兒不要了
p=a;
}
printf("%d",*p);
}
return 0;
}
這樣改完後應該能把最後剩下的號碼打出,其實可以把出局的順序也打出來樓主想想啊,挺簡單的,而且好像有很短的代碼解決這個問題,多思考啊

『陸』 C語言報數游戲

#include<iostream>
#include<cstdio>

usingnamespacestd;

intbh(intm);

intmain(void){
intn,m,k;
while(cin>>n>>m>>k&&n+m+k){
intf=0,p=0,q=m;
while(1){
if(bh(m))p++;
if(p==k){
break;
}
if(!f){
m+=2*(n-q);
f=1;
}
else{
m+=2*(q-1);
f=0;
}
}
cout<<m<<endl;
}
return0;
}

intbh(intm){
if(m%7==0)return1;//是7的倍數時,暗7。
while(m){
if(m%10==7){//某位是7時,明7。
return1;
}
m/=10;
}
return0;//既不含明7也不含暗7
}

『柒』 C語言,飯桌上的報數游戲

此題顯然有誤——

  1. 當n取1或2時能找到比1、2小的素數m嗎?

  2. 當n取3時,比3小的素數只有2一個,喝3杯後肯定沒有人喝到5杯,出不了結果,還要繼續喝下去,但得換一個「以前沒有用過的素數m」,只有一個2,再換換誰呢?

  3. 當n取5時,提問者可以自行演繹一下,同樣存在2所指出的問題。

  4. 這題也很毛糙,如「將第一個喝到5杯酒的人指出來」——假設沒有上述錯誤,按照題設規則,難道還會有第二個、第三個……喝到5杯的人嗎?不可能啊,只要有人喝到5杯了游戲立馬就結束了!


『捌』 C語言編程:報數游戲

先看看123456是8的多少倍,這樣就知道一共數了多少圈。如果是偶數圈,看看余數,按余數順序去數就行了,如果是奇數,按余數倒序數就行了。有點特殊的是余數為零時,要特別的對待一下。

程序如下:
#include<stdio.h>

void main()
{
int a,b;
a = 123456/8;//圈數
b = 123456%8;//余數

if(a%2==0 && b!=0) printf("%c\n",(char)('A'+b-1));//偶數圈,余數不為零
else if(a%2==0 && b==0) printf("%c\n",'A');//偶數圈,余數為零
else if(b!=0) printf("%c\n",(char)('A'+8-b));//奇數圈,余數不為零
else printf("%c\n",'H');//奇數圈,余數為零
}

『玖』 C語言報數游戲

//說明:我是ghalan,這是我編的程序,編譯通過的。且我用數據模擬驗證過的,測試數據都通過了。樓上的那位的答案我驗證過不正確了。我的還有詳細注釋,可以看出明顯的編程思想。
#include <stdio.h>
void main()
{
int a[100][5];
int i,j,n;//n表示案例個數
int sum=0;//統計出局人數
int t=0;//計數器
int k;//數到k後出局
scanf("%d",&n);
for (i=0;i<n;i++)
for (j=0;j<5;j++)
scanf("%d",&a[i][j]);//輸入數據

//下面模擬該過程
for (i=0;i<n;i++){
k=a[i][0];//取第一個人手中的數
sum=0;
t=0;
for (j=1;sum<4;j++){
if (j%5==0) j=0;//控制循環
if (a[i][j]!=0) t=t+1;//計數
if ((t%k==0)&&(t!=0)) {
k=a[i][j];//取出局人的數
a[i][j]=0;//出局標記
sum=sum+1;//計數出局人數
t=0;//計數清零
}
}
}
//輸出結果
for (i=0;i<n;i++)
for (j=0;j<5;j++)
if (a[i][j]!=0) printf("%d\n",j+1);
}

『拾』 C語言 報數游戲

main()
{
int a[22];
int i,j;

for(i=0;i<21;i++)a[i]=1;
a[0]=0;//這樣,a[]的下標就是編號
j=0;
int f,s;
int n;
scanf("%d",&n);
for(i=1;;i++)
{
NA:
j++;
if(j==22)j=1;//j的值是1~21
if(a[j]==0)goto NA;

if(i==n)
{
a[j]=0;
printf("j=%d\n",j);

s=0;
for(f=0;f<22;f++)
{
s+=a[f];
}
if(s==1)break;

i=0;
}
}

for(f=0;f<22;f++)
{
if(a[f]==1)
printf("%d\n",f);
}
}