当前位置:首页 » 编程语言 » 依次报数C语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

依次报数C语言

发布时间: 2022-12-19 09:25:03

1. c语言 10人围一圈,开始依次1到8循环报数,每当报8,此人出圈,至圈中剩一人停止,依次写出出圈人原编号

#define N 10

struct s
{
int val;
struct s * before;
struct s * next;
};

struct s *head=0,*temp;
int count=N;

main()
{
int i,j;
struct s *p;
printf("\n\n\n");
for(i=0;i<N;i++)
{
p=(struct s*)malloc(sizeof(struct s));
p->val=i+1;
if(head==0)
{
p->before=0;
p->next=0;
head=p;
temp=p;
}
else
{
p->before=temp;
temp->next=p;
temp=p;
if(i==N-1)
{
temp->next=head;
head->before=temp;
}
}
}
temp=head;
i=1;
while(count>1)
{
if(i==8)
{
printf("%d,",temp->val);
count--;
(temp->before)->next=temp->next;
(temp->next)->before=temp->before;
temp=temp->next;
i=1;
}
else
{
i++;
temp=temp->next;
}
}
printf("the last is %d",temp->val);
}

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;
}
这样改完后应该能把最后剩下的号码打出,其实可以把出局的顺序也打出来楼主想想啊,挺简单的,而且好像有很短的代码解决这个问题,多思考啊

3. C语言:有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数。

#include<stdio.h>

int main()

{

int i,n,N,out,a[1000];

out=i=n=0;

printf("输入约瑟夫圈大小 100 ");

scanf("%d",&N);

for(i=0;i<N;i++)

{

a[i]=1;

}

i=0;

while(out!=N-1)

{

if(a[i]==1)n++;

if(n==3){a[i]=0;n=0;out++;}

i++;

if(i==N)i=0;

}

for(i=0;i<N;i++)

if(a[i]==1)printf("最后剩下的是第%d个人",i+1);break;

return 0;

}

(3)依次报数C语言扩展阅读:

需要说明的是:

1、一个C语言源程序可以由一个或多个源文件组成。

2、每个源文件可由一个或多个函数组成。

3、一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。是整个程序的入口。

4、源程序中可以有预处理命令(包括include 命令,ifdef、ifndef命令、define命令),预处理命令通常应放在源文件或源程序的最前面。

5、每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。结构体、联合体、枚举型的声明的“}”后要加“ ;”。

6、标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

网络-c语言

4. C语言 小朋友顺逆报数 题目描述 编号为1,2,…,n的n位小朋友依次排成一列,从1号开始1,2,…,m报数, 凡报

你这个数据规模是不要求算法的,仅要求简单模拟。
下面的代码时间复杂度为O(pn):
int s[501];
int i;
int n,m,p;
int KidP;
int count=1;
void Move(int a); //移除第a个小朋友,并将后面剩下的小朋友顺序前移一位。
void TakeOut(int a); //将第count个小朋友移除队列,a=1代表从前面数,a=0代表从后面数。
int main()
{
scanf("%d%d%d",n,m,p);
for( i=1;i<=n;i++) s[i]=i;
while(count<=n-m+1)
{
TakeOut(count%2);
}
for( i=1;i<=n-m+1;i++) printf("%d ",s[i]);
printf("%d\n",KidP);
return 0;
}
void Move(int a)
{
int i;
for(i=a;i<=n-count;i++) s[i]=s[i+1];
return;
}
void TakeOut(int a)
{
if(a==0)
{
if(count==p) KidP=s[count];
Move(count);
count++;
return;
}
else
{
if(n-count+1==p) KidP=s[n-count+1];
Move(n-count+1);
count++;
return;
}
}

5. C语言:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子,

#include&lt;stdio.h&gt;

#define N 5//人数

void main()

{

int a[N]={0},i=0,out_n=0,call_n=0,*p;

p=a;

while(1){//循环报数

if(*p==0){//如果健在

if(out_n==(N-1))break;//如果仅剩一人

call_n++;//报数

call_n%=3;//最大为3,到了3就从0开始

if(call_n==0){*p=1;out_n++;}//为0(即3)出局

}

p++;if(p==a+N)p=a;//循环转向下一人

}

printf("最后剩余者的编号是:%d ",p+1-a);

}

(5)依次报数C语言扩展阅读:

printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。

函数的原型为:int printf(const char*format,...);函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。

printf()函数的调用格式为:

printf("&lt;格式化字符串&gt;",&lt;参量表&gt;);

其中格式化字符串包括两部分内容:一部分是正常字符;这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。

参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。

规定符

%d十进制有符号整数

%u十进制无符号整数

%f浮点数

%s字符串

%c单个字符

%p指针的值

%e指数形式的浮点数

%x,%X无符号以十六进制表示的整数

%o无符号以八进制表示的整数

%g把输出的值按照%e或者%f类型中输出长度较小的方式输出

%p输出地址符

%lu 32位无符号整数

%llu 64位无符号整数

6. c语言 报数

#include <stdio.h>
#include <conio.h>
int fun(int n)
{
int i = 0, p, tmp;

while( ++i <= n )
{
p = i * 3;
while (p > n)
p = p - n + (p - n - 1)/(3 - 1);
tmp=p;
}
return tmp;
}

void main()
{int m;
scanf("%d",&m);
printf("n=%d\n",fun(m));
}

7. 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,然后传址,代码还会更简化。

8. c语言编程题,有一队士兵送1-5依次报数时,最后一个人报1,从1-6报数时,最后一个人报5,

你可以改写N的值,还有就是楼上的,前面俩个条件加上,你的程序结果不存在;
10000以内是2111.4421.6731.9041
#include<stdio.h>

#define N 10000 //士兵的人数范围

int main()
{
int i;
for(i=11;i<N;i++)
{
if((i%6==5)&&(i%5==1)&&(i%7==4)&&(i%11==10))
printf("满足条件的士兵数: %d\n",i);
}
}

9. 如何用C语言编写:10人围成一圈,从第1人依次从1到8循环报数,

include<stdio.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
for(j=8;j<9;j++)
{
printf("第%d人报%d",i,j);
}
}
}

用TC的话不要用中文

10. 一道C语言结构题,求大神解答: n个人依次报数,每报到m从圈中退出,依次输出退出人的号码(用数组)

main()
{inta[100],i,j,k;
for(i=0;i<100;i++)
a[i]=1;
for(i=k=0;k<100;k++)
{j=0;
while(j<10)
{i=(i+1)%100;
if(a[i])
j++;
}
a[i]=0;
}
printf("%d ",i);
getch();
}