C语言程序解惑

来源:百度知道 编辑:UC知道 时间:2024/05/16 18:28:31
(这是一道用指针编程的题)
问题如下:
有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
我编写的程序如下:
#include <stdio.h>
void main()
{
int a[10],n,m,i,j,*p,*b,*c;
scanf("%d",&n);
p=a;
if(n<1||n>10)
printf("input error\n");
else
{
for(i=0;i<10;i++)
{
if(i<n)
a[i]=i+1;
else
a[i]=0;
}
for(i=1;i<=(3*n+3);i++)
{
m=0;
b=p;
p=a;
for(j=0;j<=9;j++,p++)
{
if((*p)!=0)
m++;
}
if(m==1)
{
p=a;
for(j=0;j<=9;j++,p++)
{
if((*p)!=0)
printf("%d\n",*p);
}
break;
}
if(m==2)
{
p=a;
for(j=0;j<=9;j++,p++)
{
if((*p)!=0)
{
c=p;
p=a;

#include <stdio.h>

/*检测a中是否只剩下1个元素不是0*/
int only(char a[], int size)
{
int i, k=0;
for (i=0; i<size; i++)
if (a[i] != 0)
k++;
if (k == 1)
return 1;
else
return 0;
}

void main(void)
{
int peo, i;
char peoE[10]={0}, *p = peoE;

scanf("%d", &peo);
if (peo>10 || peo<1)
{
printf("error!");
exit(0);
}

for (i=0; i<peo; i++)
peoE[i] = 1;

while (!only(peoE, 10))
{
for (i=0; i<3; i++)
{
while (*p == 0) /*使p指向不为0的元素*/ {
if (p == &peoE[9])
p = peoE;
else
p++;
}
if ((i==2) && (!only(peoE, 10))) /*将数到3的元素值变为0,且