13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。

#include <stdio.h>
#include <stdlib.h>struct Person{                                   //定义结构体int num;struct Person *next;
};
int main()
{struct Person per[13];                              //定义结构体变量数组int i;for (i=0; i<13; i++){                        //此循环给13个人标注序号,1对应第一个人,以此类推,同时实现循环链表,当到达链表最后一个时,地址指向开头。per[i].num=i+1;if (i==12) per[i].next=&per[0];else per[i].next=&per[i+1];}struct Person *p,*p1;for (p=per, i=1; p->next!=p; p=p->next){    //循环报号,当每次报到第3个人时,next指针直接跳过下一个变量,指向下下个变量,当next指针指向自己时结束循环。i++;if (i==3){p1=p->next;printf("%d ", p1->num);p->next=p->next->next;i=1;}}printf("\nThe number is %d\n", p->num);       //输出结果system("pause");return 0;
}

9.1

#include<stdio.h>struct Date{int year;int month;int day;
}; int main(){struct Date date;scanf("%d%d%d",&date.year,&date.month,&date.day);int Days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};int days=0;for(int i=0;i<date.month;i++){days+=Days[i];}days += date.day;if(date.month > 2){if(date.year%400 == 0 || (date.year%4==0 && date.year%100!=0)){days++;}}printf("%d",days);return 0;
}

9.3

#include<stdio.h>struct student{int num;char name[20];int score[3];
}students[5]; void input(struct student *stu){for(int i=0;i<5;i++){scanf("%d%s%d%d%d",&students[i].num,students[i].name,&students[i].score[0],&students[i].score[1],&students[i].score[2]);}
}void print(struct student *stu){for(int i=0;i<5;i++){scanf("%d %s %d %d %d",students[i].num,students[i].name,students[i].score[0],students[i].score[1],students[i].score[2]);}
}
int main(){input(students);print(students);return 0;
}

9.6

#include<stdio.h>
struct Person{int num;Person *next;
}; int main(){Person per[13];for(int i=0; i<13;i++){ //编号 per[i].num = i+1;if(i==12)  per[i].next = &per[0];else  per[i].next = &per[i+1];}Person *p;int i = 0;for(p=per; p->next!=p; p=p->next){i++;if( i%2==0){    p->next = p->next->next;i=0;}}printf("%d ",p->num);return 0;
}

9.9

#include<stdio.h>
#include<stdlib.h>
struct student{long num;float score;student *next;
}; //创建链表
student *creat(){student *head,*p1,*p2;int n=0;p1 = p2 = (student *)malloc(sizeof(student));head=NULL;scanf("%ld%f",&p1->num,&p1->score);while(p1->num!=0){n++;if(n==1){head = p1;}else{p2->next = p1;p2=p1;p1=(student *)malloc(sizeof(student));scanf("%ld%f",&p1->num,&p1->score);}}p2->next=NULL;return head;
}void print(student *head){student *p;p=head;while(p!=NULL){printf("num: %ld score: %0.1f ",p->num,p->score);p=p->next;}
}
student *insert(student *head,student *stu){student *p1,*p2;//链表为空情况 if(head==NULL){printf("原链表为空,现在插入第一个元素\n");head = stu;return head;}p1 =head;//找到插入位置 while(p1!=NULL  && stu->num > p1->num){p2=p1;p1=p1->next;}//尾部 if(p1==NULL){p2->next = stu;stu->next =NULL;}//头部if(p1==head){stu->next = p1;head =stu;} else{stu->next = p1;p2->next = stu;}return head;
}student  *del(student *head,long num){student *p1,*p2;if(head==NULL){printf("链表为空");exit(1);//程序异常退出  }    p1=head;while(p1!=NULL){if(p1->num != num){p2=p1;p1=p1->next;}else{break;}   }if(p1==NULL){printf("没有要删除的节点");exit(1);}//删头 if(p1==head){head = p1->next;free(p1); printf("删除成功\n");}else{p2->next = p1->next;free(p1); printf("删除成功\n");}return head;
}int main(){student *head,*stu;head=creat();print(head);head = del(head,1);stu = (student *)malloc(sizeof(student));stu->num = 9;stu->score = 100;stu->next = NULL;head = insert(head,stu);print(head);return 0;
}

9.10

#include<stdio.h>
#include<stdlib.h>
struct Student{int num;float score;Student *next;
}; void input(Student *stu,int n){int i;Student *p;for(p=stu,i=0;p<stu+n;p++,i++){printf("输入第%d 个学生的数据:",i+1);scanf("%d%f",&p->num,&p->score);i==n-1 ? p->next =NULL : p->next = &stu[i+1];}
}Student *merge(Student *stu1,Student *stu2,int m){ //m是第一个链表的长度 stu1[m-1].next = stu2;   //将1链表最末尾指针指向2链表的首地址Student *p,*q,temp;//排序for(p=stu1; p!=NULL; p=p->next){for(q=p->next;q!=NULL;q=q->next){if(p->num > q->num){temp.num = p->num;p->num = q->num;q->num = temp.num;temp.score = p->score;p->score = q->score;q->score = temp.score;}}}return stu1;
}void print(Student *stu){Student *p;p=stu;while(p!=NULL){printf("num: %ld score: %0.1f ",p->num,p->score);p=p->next;}
}int main(){Student *a = (Student*)malloc(3*sizeof(Student));Student *b = (Student*)malloc(2*sizeof(Student));input(a,3);input(b,2);print(merge(a,b,3));return 0;
}

9.11

#include<stdio.h>
#include<stdlib.h>
struct Student{int num;char name[20];Student *next;
}; void input(Student *stu,int n){int i;Student *p;for(p=stu,i=0;p<stu+n;p++,i++){printf("输入第%d 个学生的数据:",i+1);scanf("%d%s",&p->num,p->name);i==n-1 ? p->next =NULL : p->next = &stu[i+1];}
}Student *del(Student *stu1,Student *stu2){ Student *p,*q,*head;int i;for(p=stu1,head=p,i=1; p!=NULL; p=p->next){for(q=stu2; q!=NULL ;q=q->next){if(p->num == q->num){if(head ==p){//如果是头,头指针指向链表下一个地址head = p->next; }else if(p->next ==NULL){//如果是尾,尾指针指向链表上一个地址(p-i)->next =NULL;  //i判断前边删掉了几个节点 }else{//链表上一节点指向下一个节点(p-1)->next = p->next;i++; }}}}return head;
}void print(Student *stu){Student *p;p=stu;while(p!=NULL){printf("num: %ld name: %s ",p->num,p->name);p=p->next;}
}int main(){Student *a = (Student*)malloc(3*sizeof(Student));Student *b = (Student*)malloc(2*sizeof(Student));input(a,3);input(b,2);print(del(a,b));return 0;
}

9.12

#include <stdio.h>
#include <stdlib.h>
typedef struct Student{                                             //定义结构体Studentint num;char name[20];char sex;int age;struct Student *next;
}Student;void input(Student *stu, int n);                            //定义输入函数
void print(Student *stu);                                   //定义输出函数
struct Student *del(Student *stu1, int n);
int main(){int m;Student *s = (Student*)malloc(3*sizeof(Student));input(s , 3);scanf("%d",&m);print(del(s , m));return 0;
}//输入函数
void input(Student *stu, int n)
{int i;Student *p;for (p=stu, i=0; p<stu+n; p++, i++){printf("Please enter No.%d student info; ", i+1);scanf("%d %s %c %d", &p->num, p->name, &p->sex, &p->age);if(i==n-1){p->next=NULL;}else{p->next=&stu[i+1];}}
}//输出函数
void print(Student *stu)
{Student *p;for (p=stu; p!=NULL; p=p->next)printf("%d %s %c %d\n", p->num, p->name, p->sex, p->age);
}Student *del(Student *stu, int n){Student *p , *head;int i;for(p=stu,head = p,i=1; p!=NULL; p=p->next){if(p->age == n){if(head ==p ){          //判断是否为头指针,如果是头指针就指向链表的下一个地址head = p->next;}else if(p->next == NULL){//判断是否是尾指针,如果是尾指针就指向链表上一个地址(p-i)->next == NULL;   //i的作用是判断链表之前是否有删除的节点}else{(p-1)->next=p->next;i++;}}}return head;
}

13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。相关推荐

  1. (链表解决)13个人围成一圈,从第一个人开始顺序报号1,2,3,凡报到3的人,退出圈子,找出最后留在圈子里的人的序号。

    题目 13个人围成一圈,从第一个人开始顺序报号1,2,3,凡报到3的人,退出圈子.找出最后留在圈子里的人的序号. 代码 #include <stdio.h> #define n 13 ty ...

  2. 海大910-2014年编程题1:13个人围成一圈, 从第1个人开始顺序报号1, 2, 3。凡报到3者退出圈子。找出最后 留在圈子中的人原来的序号。要求用链表实现。(15分)

    题目 本题是2014年中国海洋大学研究生入学考试910高级程序设计程序设计题第1题. 题目: 13个人围成一圈, 从第1个人开始顺序报号1, 2, 3.凡报到3者退出圈子.找出最后 留在圈子中的人原来 ...

  3. c语言】13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号

    题目(摘自谭浩强的C语言):有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那个人. 解法思路:首先不要将思维局限在一圈人,可以先将n个 ...

  4. 有n个人,顺序排列, 并首尾相连围成一圈。从第一个人开始报数(从1到4),凡报到4的人退出圈子+扩展版本

    https://blog.csdn.net/qq_44037213/article/details/106551760?fps=1&locationNum=2 有n个人(n<=1000) ...

  5. 13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。

    [绕圈报数] 1130 更新 ======== 一般化情况 13个人围成一圈,从第1个人开始顺序报号1.2.3,凡报到3的人退出圈子.找出最后留在圈子里的人原来的序号. 输出提示 "出圈成员 ...

  6. 13个人围成一圈,从第1个人开始顺序报号1,2,3。 凡报到3者退出圈子

    #include <stdio.h> #include <stdlib.h> #define N 13 /* 13个人围成一圈,从第1个人开始顺序报号1,2,3. 凡报到3者退 ...

  7. 7-5 模拟报数游戏(约瑟夫环问题):有n个人围成一圈从1开始按顺序编号从第一个人开始从1到k报数,报到k的人退出圈子;然后圈子缩小,下一个人继续,问最后留下的是第几号(只留1 人)。要求定义函数

    学习记录与分享 PTA程序设计类教学平台-Python作业二(循环结构程序设计) 题目 7-5 模拟报数游戏(约瑟夫环问题) 有n个人围成一圈,从1开始按顺序编号,从第一个人开始从1到k报数,报到k的 ...

  8. C语言 n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,计算最后留下的是最初第几号人

    #include <stdio.h> int main(){int i,k,m,n,num[50],*p;printf("几个人围成一圈?");scanf(" ...

  9. java 小孩报数_N个小孩围成一圈1-3报数,报3出局

    有N个小孩围成一圈,从1-3报数,报到3的出列,编码实现小孩出列顺序. [随便一个方向,1-3的排,是3的出局] 提示:用到Boolean 实现: public class WeiQuan { pub ...

最新文章

  1. myeclipse 2019中文版
  2. Java多线程生产者消费者调度实现
  3. dataframe常用处理
  4. 1024,第 15 届「中国内核开发者大会」 参会指南(议程全剧透)
  5. QML笔记-整合C++及单例模式管理QML中控件
  6. 仙岛求药(信息学奥赛一本通-T1251)
  7. SQL入门-Navicat的基本使用
  8. 关于布隆过滤器的所有信息:利用Hash实现的索引方案
  9. 站长吧asp工具设置_网站更换域名需要怎么办?网站更换域名如何设置?
  10. PAT-BASIC-1001-害死人不偿命的(3n+1)猜想
  11. Android AIDL远程服务demo
  12. fseek函数与ftell函数使用例程
  13. CSS实现文字描边效果
  14. 动力电池SOC估算方法综述
  15. 让ADB识别未知设备...
  16. 关于企业高校相关重要电气设备漏电保护方式的探究
  17. 带你玩转Jetson Xavier NX系列教程 | Xavier NX刷机教程
  18. 机器学习cae_关于CAE 仿真对HPC需求的迷思-Part 1
  19. Spring声明式事务配置管理方法
  20. 江西有哪些互联网企业推荐(上)?

热门文章

  1. [ linux ] linux 命令英文全称及解释
  2. 《现代传媒与批判性思维》2020期末考试答案
  3. 数据火器库八卦系列之瑞士军刀随APP携带的SQLite
  4. 国外评论华为鸿蒙,华为鸿蒙在国外爆火!老外对其评价是亮点,网友:真长脸!...
  5. Multimodal Deep Learning(多模态深度学习)未完待续
  6. 中科大郑烇、杨坚《计算机网络》课程 第一章笔记
  7. 最详细的计算机网络思维导图 谢希仁(第七版)——第一章
  8. ICASSP2023录用率有可靠度还不错的消息了
  9. 网页视差滚动效果html,30个使用视差滚动效果的时尚网页设计欣赏
  10. 常用分类评估指标(二分类多分类)