c语言数组报数出圈函数 c语言中数组输出怎么表示

C语言:10人围一圈,1到8循环报数,报数为8的出圈到圈中剩一人为止按退出次序输出出圈人原来的号

#include stdio.h

成都创新互联公司是一家专注于成都网站建设、成都做网站与策划设计,贺州网站建设哪家好?成都创新互联公司做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:贺州等地区。贺州做网站价格咨询:18982081108

int main(void)

{

int n, m, i, s=0;

printf ("N M = "); scanf("%d%d", n, m);

for (i=2; i=n; i++) s=(s+m)%i;

printf ("The winner is %d\n", s+1);

}

说明:只要输入N=10,M=8即可满足你的要求 还可以有其他变化 其中n为总人数 M为报数最大值

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

#include stdio.h

void main()

{

int i = 0;

int n = 0;

int out = 0; //退出的人数

int num = 0; //报数

int a[1024] = {0}; //0表示退出圈子

printf("Input n:");

scanf("%d", n);

for (i = 0; i n; i++)

{

a[i] = 1;

}

i = 0;

while (out != n-1)

{

if (a[i] == 1)

{

num++;

}

if (num == 3)

{

a[i] = 0;

num = 0;

out++;

}

i++;

if (i == n)

{

i = 0;

}

}

for (i = 0; i n; i++)

{

if (a[i] == 1)

{

printf("最后留下的人是%d号.\n", i+1);

break;

}

}

}

M个人围成一圈报数,报到N的人出列,输出出列顺序!用C语言实现!

此题可用数学方法求解。

设有n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数  (用数学方法解的时候需要注意应当从0开始编号,因为取余会取到0解。)

实质是一个递推,n个人中最终留下来的序号与n-1个人中留下来的人的序号有一个递推关系式。

假设除去第k个人,则

0, 1, 2, 3, ..., k-2, k-1, k, ..., n-1          // 原始序列 (1)

0, 1, 2, 3, ..., k-2,      , k, ..., n-1      // 除去第k人,即除去序号为k-1的人   (2)

k, k+1, ..., n-1,    0,    1,        ..., k-2// 以序号k为起始,从k开始报0  (3)

0, 1,     ..., n-k-1, n-k, n-k+1, ..., n-2   // 作编号转换,此时队列为n-1人  (4)

换后就完完全全成为了(n-1)个人报数的子问题,注意(1)式和(4)式,是同一个问题,不同的仅仅是人数。比较(4)和(3),不难看

出,0+k=k, 1+k=k+1, ... ,(3)式中'0'后面的数字,((n-3)+k)%n=k-3,((n-2)+k)%n=k-2,

对于(3)式中'0'前面的数字,由于比n小,也可看作(0+k)%n=k,  (1+k)%n=k+1,  故可得出规律:

设(3)中某一数为x' , (4)中对应的数为x,则有:x'=(x+k)%n.

设x为最终留下的人序号时,队列只剩下1人时,显然x=0; 此时可向前回溯至2人时x对应的序号,3人时x对应的序号……直至n人时x的序号,即为所求。

#include stdio.h

int main()

{    

int n,m,s=0;    

scanf("%d%d",n,m);    

for (int i=2;i=n;++i)    

{s=(s+m)%i;    

printf("%d\n",s+1);}    

return 0;

}

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;iN;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(count1)

{

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);

}

当前题目:c语言数组报数出圈函数 c语言中数组输出怎么表示
标题网址:https://www.cdcxhl.com/article20/dojohjo.html

成都网站建设公司_创新互联,为您提供动态网站虚拟主机网页设计公司网站建设网站维护软件开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司