朗逸第二年保险:c语言编程问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/06 12:37:10
N(N<100)个人围成一圈,按顺序排号。从第一个人开始报数(从1到5报数),凡报到5的人退出圈子,问最后留下的是最初的第几号。用指向数组的指针实现。

多谢高手相助!

已经用行了……符合你的要求用指针数组做的
#define nmax 100
int main(void)
{
int i,k,m,n,num[nmax],*p;
printf("please input the total of numbers:");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while(m<n-1)
{
if(*(p+i)!=0) k++;
if(k==5)
{ *(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) i=0;
}
while(*p==0) p++;
printf("%d is left\n",*p);
getch();
return 0;
}

本例人数从0开始计,也就是人页编号为:0,1,2,3,...,99.如要输出从1开始计数的结果,请将l赋初值1.
main()
{
int i,j=0,k,l=0,sum=0;
int a[101];
int *p=a;
for(i=0;i<100;i++)
{
*p=1;
p++;
}
a[100]=2;

while(1)
{
if(*p!=0&&*p!=1)
{
p=&a[0];
}
sum=0;
for(i=0;a[i]!=2;i++)
sum+=a[i];
if(sum==1) break;

if(*p==1)
{
j=j+1;
if(j%5==0)
{
*p=0;
}
}
*p++;
}
*p=&a[0];
while(*p==0)
{
p++;
l++;
}
printf("\n the last people is Number %d",l);
getch();
}

最后的四个数估计是对的,但最后一个没有把握,可能对,可能错.

#include <stdio.h>
#include <stdlib.h>
main()
{
int *id;
int i,j;
int N;
int i0;

printf("Enter N: ");
scanf("%d",&N);

id = (int *) malloc( (N+1) * sizeof(int) );

for (i=1;i<=N;i++) id[i] = i;

if (N < 5){
switch (N)
{
case 1: printf("Last one: %d ",id[1]);break;
case 2: printf("Last one: %d ",id[2]);break;
case 3: printf("Last one: %d ",id[1]);break;
case 4: printf("Last one: %d ",id[2]);break;
break;
}
exit(0);
};

j=0;
i0=0;
Lab01:
for (i=1;i<=N;i++){
if ((i + i0) %5 != 0){
j = j+1;
id[j]=id[i];
};
}
i0 = (N+i0) % 5;
N = j;
j = 0;
if (N >=5) goto Lab01;
printf("Last Four: ");
printf("%d %d %d %d\n",id[1],id[2],id[3],id[4]);
switch (i0){
case 0: printf("Last One: %d",id[2]);break;
case 1: printf("Last One:%d",id[1]);break;
case 2: printf("Last One:%d",id[4]);break;
case 3: printf("Last One:%d",id[3]);break;
case 4: printf("Last One:%d",id[2]);break;
break;
}
}
用MS VC++ 编译器编译. prog.c
例子:
prog.exe
Enter N: 99
Last Four: 21 42 46 74
Last One: 42

prog.exe
Enter N: 1000
Last Four: 73 563 763 802
Last One: 763

Enter N: 9
Last Four: 2 6 8 9
Last One:8

这是用c++ 实现的,供参考。
//n个人,数到m出列
#include<iostream.h>

class Node
{
public:
int flag;
int data;
Node * next;
};

void main()
{
int n,m,i,count=0;
Node * p,* pp,* Head,*pre;
cout<<"请输入n:"<<endl;
cin>>n;

cout<<"请输入m:"<<endl;
cin>>m;

Head =new Node;
Head->next=NULL;
Head->flag=1;
Head->data=1;
p=Head;

for(i=0;i<n-1;i++)
{
pp=new Node;
p->next=pp;
p=p->next;
p->flag=1;
p->data=i+2;
}
p->next = Head;

pre=p=Head;
i=1;
for(;;)
{
if(p->flag==1)
{
if(i==m)
{
p->flag=0;
i=0;
count++;
if(count==n-1)
break;
}
i++;
}
pre=p;
p=p->next;
}

for(i=0;i<n;i++)
{
cout<<Head->flag;
if(Head->flag==1)m=Head->data;
Head=Head->next;
}
cout<<endl<<"最后剩下的是第"<<m<<"位."<<endl;
}