有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的
人退出圈子,问最后留下的是原来第几号的那位。要求用指针方法处理。
#include<iostream>
using namespace std;
//create struct node
struct node{
int data;
struct node *next;
};
int main(){
int n;
cin>>n;
node *head=new node;
node *p=head;
head->data=1;
// head->next=nullptr;
for(int i=2;i<n+1;i++){
p->next=new node;
p=p->next;
p->data=i;
if(i==n){
p->next=head;
}
}
p=head;
for(int i=1;i<n;i++){
p=p->next;
p->next=p->next->next;
p=p->next;
}
cout<<p->data;
return 0;
} #include <stdio.h>
int main() {
int num[50], *p,m;
int k = 0,n,i;
printf("input number of person: n:");
scanf_s("%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 == 3) {
*(p + i) = 0;
k = 0;
m++;
}
i++;
if (i == n)
i = 0;
}
}
while (*p == 0)
p++;
printf("the number is %d", *p);
return 0;
}