原题链接:[编程入门]报数问题
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct Node{
int c;
struct Node* next;
}NODE, * node;
typedef struct{
char* head;
int len;
}LIST, * list;
int main(){
int n;
int status = scanf("%d", &n);
LIST l;
l.head = NULL;
l.len = n;
node t = NULL;
node tail = NULL;
for(int i = 1; i <= n; i++){
t = (node)malloc(sizeof(NODE));
if(t != NULL){
t->c = i;
t->next = NULL;
if(tail != NULL){
tail->next = t;
tail = tail->next;
//printf("第%d次: %p\n", i,l.tail);
} else{
tail = t;
l.head = t;
//printf("仅仅一次: %p\n", l.tail);
}
}
}
int j = 0;
node temp = NULL;
node temp_0 = NULL;
while(l.len != 1){
for(t = l.head; t;){
j++;
if(j % 3 == 0){
if(t == l.head){
l.head = t->next;
}
temp_0 = t;//当前要删除的指针.
t = t->next;//转到下一个指针.
if(temp != NULL)
temp->next = t;//把上一个指针链接到下一个指针
free(temp_0);//当前指针被删除.
temp_0 = NULL;
j = 0;
l.len--;
if(l.len == 1) break;
} else{
temp = t;//上一个指针
t = t->next;//下一次循环,因为j不满足%3==0,所以要跳到下一个.
}
}
}
temp = l.head;
printf("%d", temp->c);
free(temp);
temp = NULL;
tail = NULL;
t = NULL;
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复