当前位置:首页 » 编程语言 » 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);
}
}