C语言题目 求助!!

2025-06-21 18:25:21
推荐回答(5个)
回答1:

/* 

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

 3  6  9 12 15  4  8 13  2 10  1 11  7 14  5

Press any key to continue

*/

#include 
#include 

typedef struct node {
unsigned number;
struct node *next;
} *NODE;

typedef struct list {
NODE head;
unsigned length;
} *Loop;

Loop InitList(void) {
Loop JosephLoop = (Loop)malloc(sizeof(list));
JosephLoop->head = (NODE)malloc(sizeof(node));
JosephLoop->head->number = 0;
JosephLoop->length = 0;
return JosephLoop;
}

void CreateList(Loop JosephLoop,unsigned n) {
unsigned i;
NODE p = JosephLoop->head;
JosephLoop->length = n;
for(i = 1; i <= n; ++i) {
p->next = (NODE)malloc(sizeof(node));
p->next->number = i;
p = p->next;
}
p->next = JosephLoop->head;
}

void Show(Loop JosephLoop) {
NODE p = JosephLoop->head->next;
while(p != JosephLoop->head) {
printf("%2u ",p->number);
p = p->next;
}
printf("\n");
}

void NumberOff(Loop JosephLoop) {
unsigned count = 0;
NODE q,p = JosephLoop->head;
while(JosephLoop->length > 1) {
if(p->next == JosephLoop->head) p = p->next;
++count;
if(count % 3 == 0) {
printf("%2u ",p->next->number);
q = p->next;
p->next = q->next;
free (q);
--JosephLoop->length;
count = 0;
}
else p = p->next;
}
printf("%2u ",JosephLoop->head->next->number);
// printf("%2u ",JosephLoop->head->next->next->number);
printf("\n");
}

int main() {
Loop JosephLoop = InitList();
CreateList(JosephLoop,15);
Show(JosephLoop);
NumberOff(JosephLoop);
return 0;
}

回答2:

定义一个链表类
手动输入人员个数 循环遍历建立链表
把最后一个data里的指针 指向头结点
然后开始while 循环 直到next->data = NULL
就可以了

回答3:

int count;
stuct stutent
{
// int data;
bool flag; //被推出 则为1,否则为0
}stu[N]; //N为宏定义量
while(count{
for(i=1;i {
while(!stu[i].flag) //跳过哪些已经被推出的家伙
{
i++;
}
//下面是推出一个人——每次循环都推出一个人
stu[i].flag=1;
count++;
if(count=N-1) //只剩下1个人
prinft(" ");
}
}

回答4:

#include 
#define N 10
int main()
{
    int a[N];
    int i,c,d;
    for(i=0;i        a[i]=1;
    d=0;
    for(i=1;i    {
        for(c=0;c<3;c++)
        {
            while(a[d%N]==0) d++;
            d++;
        }
        d--;
        a[d%N]=0;
        printf("%d ",d%N);
    }
    printf("%d",d%N);
}

回答5:

#include "stdio.h"

void main()
{
    int n;
    printf("请为 N 输入一个数字\n");
    scanf( "%d" , &n );
    for( int i = 1; i <= n; i++ )
    {
        if( ( i % 3 ) != 0 )
            printf( "%d " , i );
     }
}