有十七个人围成一圈,标号为从0到16,从1开始报数,报到3的倍数的人被去掉,最后只能留下一个人,这个人是多少号?
c++初学者的问题
- 提问者网友:流星是天使的眼泪
- 2021-07-18 06:38
- 五星知识达人网友:轻雾山林
- 2021-07-18 06:59
#include<stdio.h>
#include<iostream>
#include<conio.h>
#define MAX 17
#define STEP 3
using namespace std;
struct cell
{
int num;
cell *next;
}a[MAX];
void main()
{
cell *pchain;
int i;
for(i=0;i<MAX;i++)
{
a[i].num=i+1;
}
for(i=0;i<MAX;i++)
{
if(i!=MAX-1)
{
a[i].next=&a[i+1];
}
else
{
a[i].next=&a[0];
}
}
pchain=&a[0];
while(pchain->next!=pchain)
{
for(int i=1;i<STEP-1;i++)
{
pchain=pchain->next;
}
// printf("%d ",pchain->next->num);
cout<<" "<<pchain->next->num;
pchain->next=pchain->next->next;
pchain=pchain->next;
}
// printf("\n");
// printf("The last cell is number : %d",pchain->num);
// printf("\n");
cout<<endl;
cout<<"The last cell is number: "<<pchain->num<<endl;
getch();
}
- 1楼网友:持酒劝斜阳
- 2021-07-18 09:37
貌似是一个约瑟夫环问题
#include<stdio.h> #include<malloc.h> typedef struct huan { int num; struct huan *next; }Lhuan;
Lhuan *creat(int n) //建立循环链表 { int i=1; Lhuan *p1,*head; head=p1=(Lhuan *)malloc(sizeof(Lhuan)); head->num=p1->num=i; for(i=2;i<=n;i++) { p1->next=(Lhuan *)malloc(sizeof(Lhuan)); p1=p1->next; p1->num=i; } p1->next=head; return(head); }
void baoshu(int n,int m,Lhuan *head) //报数 { Lhuan *p1,*p2,*p3; int i=2,j=1; //j是计数器 p2=head; p1=head->next; while(j!=n+1) { if(i==m) { p3=p1; p1=p1->next; p2->next=p3->next; i=0; j++; printf("%d ",p3->num); free(p3); } else { p1=p1->next; p2=p2->next; } i++; } }
void main() { Lhuan *head; int m,n; printf("请输入参加报数的人数N和退出的号数M:\n"); printf("N="); scanf("%d",&n); printf("\nM="); scanf("%d",&m); head=creat(n); printf("\n退出的依次是:"); baoshu(n,m,head); printf("\n"); }
- 2楼网友:有你哪都是故乡
- 2021-07-18 08:03
#include <stdio.h> #include <string.h> #define MAXSIZE 100
int main( void ) { char array[MAXSIZE]; char a[MAXSIZE]; int i, j, len,count,m; //数到m的人出圈,从第j项开始 count = 0; printf( "输入元素建立一个数组:"); gets( array ); len = strlen( array ); printf( "从第几项开始:"); scanf( "%d", &j); while( j < 1 || j > len ) { printf( "超出范围!!!请重新输入:"); scanf( "%d", &j ); } printf( "数到m的人出圈:"); scanf( "%d", &m ); while( m < 1 || m > len ) { printf( "超出范围!!!请重新输入:"); scanf( "%d", &m ); } for( i = 0; i < j-1; i++, len++ ) { array[len] = array[i]; } // printf( "len=%d",len ); for( i = j; i <= len; i++) { if( i%m == 0 ) { a[count] = array[i-1]; count++; } else { array[len] = array[i-1]; len++; } } printf( "输出为:"); for( i = 0; i < count-1; i++) { printf( "%c->", a[i] ); } printf( "%c", a[i] ); printf( "\n" ); return 0; }