C语言一道简单的题 晒下代码!

来源:百度知道 编辑:UC知道 时间:2024/05/24 18:53:19
题目:有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位.

是谭浩强上的一道题,要求用C语言(用汇编也可以,虽然我不会!)尽量精简的代码解答!(那种把循环里的{a=b;b++}改写成a=b++不算)

如果有什么好的算术方法或真的用汇编的话,再加分!佩服!!

我的笨办法:http://hi.baidu.com/%CE%D2%B5%C4%B0%D9%CA%C2%BF%C9%C0%D6/blog/item/cd3ca3d384d88f36970a1688.html
顺便帮忙看看http://zhidao.baidu.com/question/33082625.html
谢谢了先!

这个题用指针就很简单
#include<stdio.h>
void main()
{
int num[50],i,j,k,*p,x;
p=num;
//输入人数
printf("输入人数");
scanf("%d",&x):
for(i=0;i<50;i++)
{
*(p+i)=i+1;
}
//退出的人数
j=0;
//报数控制1~3
k=0;
//控制指针偏移
i=0;
while(j<x-1)
{
if(*(p+i)!=0)
{
k++
}
if(k==3)
{
*(p+i)=0;
j++;
k=0;
}
i++;
if(i==x)
{
i=0;
}
}
while(*p==0)
{
p++;
}
printf("最后留下的是%d号\n",*p);
}

#include <stdio.h>
#include <malloc.h>
#define N 10

void main()
{
int student[N];
int i = 0;
int j = 0;
int count = 0;
for(i=0; i<N; i++)
{
student[i] = i;//初始化
}
i = 0;
while(i<N)
{
if(student[j] >=