首页 > 试题广场 >

有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数

[问答题]

n个人围成一圈,顺序排号。从第1个人开始报数(从13报数),凡报到3

人退出圈子,问最后留下的是原来第几号的那位。要求用指针方法处理。

推荐

#include<stdio.h>

int main()

{int i,k,m,n,num[50],*p;

printf("\ninput number of person:n="):

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==3)

{*(p+i)=0;

k=0;

m++;

}

i++;

if(i==n)i=0;

}

while(*p==0)p++;

printf("The last one is NO.%d\n",*p);

return 0;

}


发表于 2018-03-25 10:31:56 回复(0)
#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;
}

发表于 2021-10-13 09:41:50 回复(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;
}

发表于 2020-03-31 09:36:52 回复(0)
#include <stdio.h>
int alive(int n){
 const int s = n + 1;
 int list[s][s];
 for(int i = 0; i < s; i ++){
  for(int j = 0; j < s; j ++)
   list[i][j] = 0;
 }
 for(int i = 1; i < s; i ++){
  list[0][i] = i;
 }
 int cnt = 1;
 int flag = 0;
 int f = 1;
 while(1){
  if(cnt > 3)
   cnt = 1;
  if(f >= s)
   f = 1;
  if(list[f][0] == 3){
   f ++;
   continue;
  }
  else{
   list[f][0] = cnt;
   if(cnt == 3)
    flag ++;
   f ++;
   cnt ++;
  }
  if(flag == n - 1)
   break;
 }
 for(int i = 1; i < s; i ++){
  if(list[i][0] != 3)
   return list[0][i];
 }
}
int main(){
 int n;
 scanf("%d", &n);
 printf("%d \n", alive(n));
}
编辑于 2020-01-02 23:09:44 回复(0)