C语言程序设计题目,高手进~~~~~~~~~~

有n个人围成一圈,顺序排号,从第一个人开始报数(从1-3报数),凡报到3的退出圈子请用C语言编程并求出最后留下的是原来的第几号的那位

#include<stdio.h>
#define size 10 //总共的人数
#define n 3 //报到n出局
struct child //定义链表
{
int num;
struct child *next;
}child[size];

int lastchild(struct child *p)
{
int j=0,k=0; //为了方便k为0、1、2循环
j=size;
while(j!=1) //剩一个人时推出循环
{
if(k==1) //当k==1时,删除k为2的结点
{
p->next=p->next->next;
k=0;
p=p->next;
j--;
}
else //否则的话,指针向下移动
{
k++;
p=p->next;
}
}

return p->num;

}

void main()
{
int i,m;
struct child *head;
head=&child[0]; //头指针
for(i=0;i<size-1;i++) //size-1个小孩间建立链表
{
child[i].num=i+1;
child[i].next=&child[i+1];
}
child[size-1].num=size; //最后一个小孩指向第一个小孩
child[size-1].next=&child[0];

m=lastchild(head);

printf("%d\n",m);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-05
二楼的解答不对的,没这么简单。
先给你个提示你自己思考下:
1、n个数,从1开始计数,把每次从1到最后的人数完记为一圈,每圈可以得到几个参数,如下:
删除的人数:n/3(当n为3的倍数时,第二圈的开始数就不是从1开始,而是从1+n%3开始数,举例:n=5,第二圈时,第一个人,是数1+5%3 = 3,就好像在他前面加上了两个人,即加上了n%3个人)
剩余的人数:n - n/3
弥补n%3个人后,再计算:弥补后的总数为:t = n-n/3+n%3,第二遍循环剩余的人数为:
t - t /3 ,再弥补。每次删除的人,用数组装起来(长度为n),最后没有装进数组的即为答案。

你先思考下。
第2个回答  2012-06-05
//输入圈中元素个数n(从1开始)和每次删除的元素在环中的位置m(从0开始)
int LastRemaining(int n, unsigned int m)
{
// invalid input
if(n <= 0 || m < 0)
return -1;

// if there are only one integer in the circle initially,
// of course the last remaining one is 0

int lastinteger = 0;

// find the last remaining one in the circle with n integers
for (int i = 2; i <= n; i ++)
lastinteger = (lastinteger + m) % i;

return lastinteger;
}
第3个回答  2012-06-04
才10 分.太少了..

c语言程序大神帮忙设计一下?
1、实现文件写入功能,一次写入一个职工信息。2、实现查询功能(包含4种条件查询)。3、实现信息删除和修改并写入文件。根据题意,数据用结构数组存储,且职工编号唯一性,因此单独两个函数计算信息长度和编号。除条件查询函数和读取文件的函数,不会自行free释放内存。如你写代码调用,注意自行写free语句释放。

c语言高手进。 帮我编程下 。 小弟感激不尽~
include<stdio.h> int main(void){ int yearB=0, monthB=0, dayB=0;int yearE=0, monthE=0, dayE=0;int difYear, difMonth;\/\/ 输入日期1 printf("Input the beginning date(yyyy.mm.dd)\\n");scanf("%d.%d.%d", &yearB, &monthB, &dayB);\/\/ printf( "%d.%d.%d\\n", ye...

帮忙完成一下这个C语言课设题目
设计一个程序用于猜测篮球的价格,最高价格设为1000,程序初始猜测值设为300。通过以下方法进行猜测:1. 首先,定义篮球价格变量为300,最高价格变量为1000,猜测值变量为150。2. 使用循环进行猜测。如果猜测值与实际价格不同,根据实际情况调整猜测值。如果猜测值大于实际价格,猜测值更改为猜测值的一半;...

怎么用C语言编写这道题的程序?急~~~
分析:任意10进制转x进制有这样的方法,下面以39转2进制为例:39\/2=19……1 19\/2=9……1 9\/2=4……1 4\/2=2……0 2\/2=1……0 1\/2=0……1 把余数倒过来写,得100111。即39的二进制为100111。要求:给出一个x,返回其二进制的y.思路:1.将x\/2求余,将余数逐个保留到数组t[]中。

C语言程序设计 我是C语言初学者,有一道看程序的题我有些弄不懂,还请...
答案:C A:是如果a>b,则一程序一直执行到“b=c;”,效果是换a与b的值;B:是如果a>b,则执行{ }里的语句,效果是交换a与b的值;C:是如果a>b,则执行c=a; 无论a是否大于b,c的值都要给a,a-b;没什么作用;D:是如果a>b,则效果是交换a与b的值,c相当于中转站,a-b;没什么...

编程高手请进!(C语言)
scanf("%c",&yes);} } 2.include <stdio.h> void main(){ int gj, mj, xj, t1, t2;for (gj=1; gj<=20; gj++){ for (mj=1; mj<34; mj++){ xj=100-gj-mj;t1=xj%3;t2=5*gj+3*mj+xj\/3;if (t1==0&&t2==100)printf("gj=%d,mj=%d,xj=%d\\n",gj,mj,xj);} }...

《C语言程序设计》练习题
一、选择题 1、C语言规定,在一个源程序中,main()函数的位置(C )。A) 必须在最开始 B)必须在最后 C) 可以任意 D) 必须在系统调用的库函数后面 这题你死记就行,你看看这个 任何一个C++程序都必须定义一个main函数,它的返回类型总是int类型。这个函数由操作系统来调用,在main函 数...

c语言程序设计简答题汇总?
C语言程序设计,简答题,求正解啊.1.?以下程序的输出结果是什么。includestdio.h void?main(?){ ??int?a=1,b=0;??switch(a)?{ \/\/switch选择语句,a?=?1,那么就选择case?1执行.???case?1:\/\/注意此处case?1没有break,所以后面的case?2也执行.???switch(b)?{ \/\/switch选择语句,b...

C语言简单编程题目两道,求高手做一下。高分!!!
第2题 :void isVal(void){ int i, tmp, val;int count = 0, j = 0;for (i = 0; i < MAX; i++) { \/\/ 循环验证所有数字 count = 0; \/\/ 每次清0 tmp = a[i]; \/\/ 为了不改变a数组的值, 用tmp保存着 while (tmp > 0) { \/\/ 依次取得4个位存到val变量中...

C语言高手来一下帮我编个小程序
首先,我可以用字符串来做。我现在先把代码贴上:include <stdio.h> int main(){ char *str , *ch , *c[] = {"个位为:" , "十位为:" , "百位为:" , "千位为:" , "万位为:"};scanf("%s",str);int i = 0 ;\/\/要求1.求出它是几位数 printf("此数为%d位数\\n",(size...

相似回答