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语言中数组输出怎么表示
分享链接:http://azwzsj.com/article/dojohjo.html