有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; }