防爆压力变送器:一个C语言编程题目,请高手指点

来源:百度文库 编辑:高校问答 时间:2024/04/29 23:00:38
有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
请问不用链表怎么写,请在实现思想上给以指点。谢谢!

可以参考以下:

1.程序分析:
2.程序源代码:
#definenmax50
main()
{
inti,k,m,n,num[nmax],*p;
printf("pleaseinputthetotalofnumbers:");
scanf("%d",&n);
p=num;
for(i=0;i *(p+i)=i+1;
i=0;
k=0;
m=0;
while(m {
if(*(p+i)!=0)k++;
if(k==3)
{*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n)i=0;
}
while(*p==0)p++;
printf("%disleft\n",*p);
}

最好是说方法啊

/*
在数组内放入1,对1的个数进行计数,每计数到三个1,则输出当前位置。
且当前位置清0。一直到所有的数都计数完毕。
*/

#include<stdio.h>

void main()
{
int a[21];
int n=0,i,sum,subsum=0;
printf("enter n:"); /*输入n*/
scanf("%d",&n);
sum=n;
for(i=1;i<=n;i++) /*初始化*/
a[i]=1;
i=0;
while(sum>0)
{
subsum=0;
while(subsum<3) /*计数3*/
{
i++;
if(i>n)
i-=n;

if(a[i]!=0)
{
subsum++;
}

}
printf("%d ",i); /*输出当前数*/
a[i]=0; /*清零*/
sum--;
}
}

enter n:
3(输入)
3 1 2(输出)

enter n:
10(输入)
3 6 9 2 7 1 8 5 10 4(输出)

很简单,我定义了一个结构来模仿实际的人:

#include <stdio.h>

#define NUM 10 /*人数*/

typedef struct _P
{
int id;/*人的序号,也就是做的位置*/
int isOut;/*是否出局,0标识没有,1标识出局*/
}P;

void main()
{
P p[NUM];
int count=0,out=NUM,count1=0;
/*初始化*/
for(count=0;count<NUM;count++)
{
p[count].id=count+1;
p[count].isOut=0;
}
count=0;
/*开始循环踢人*/
while(out!=1)/*当剩下一人停*/
{
for(count1=0;count1<3;)/*没有退出的人报数报到3退出*/
{
if(p[count].isOut==0)count1++;/*只有没有退出的人可以报数*/
count++;
if(count==NUM)count=0;/*检查是不是到尾了,如果是到尾就回到头*/
}
count--;
if(count<0)count=NUM-1;
p[count].isOut=1;/*设置退出的人的退出标识为真*/
printf("%d ",p[count].id);
out--;/*退出的人数减1*/
}
/*显示*/
for(count=0;count<NUM;count++)
{
if(p[count].isOut==0)
{
printf("the lase person id:%d\n",p[count].id);
break;
}
}
}

在NUM为10的情况下的结果:
3 6 9 2 7 1 8 5 10 the lase person id:4
Press any key to continue

搞笑的题目,不管n是多少,最后剩下的肯定是1号和2号啦,根本不用算。

#include <stdio.h>

int main () {
// insert code here...
int n,a=1,count=0;
do{
scanf("%d",&n);}while (n<3);
int array[n];
while(count<n-1)
{
for (int i=0; i<n; i++) {
if(array[i]!=3)
{array[i]=a;
a++;}
if(a>3) a=1;
if (array[i]==3) count++;
if (i==n-1&&count<n-1) count=0;
}
}
for (int i=0; i<n; i++) {
if (array[i]!=3) {
printf("num%d left",i+1);
}
}
return 0;
}