约瑟夫环和一元多项式修正版

这里先附上上一篇博文的链接大家可以对比着看,错误已经改正https://blog.csdn.net/2302_78946488/article/details/141751514?spm=1001.2014.3001.5501

约瑟夫环

以下是详细代码

//约瑟夫环
#include<stdio.h>
#include<stdlib.h>
//建立链表结点
struct Node{int data;struct Node * next;
}; 
//创建循环单链表
struct Node* createCircularList(int n){struct Node * head=NULL;struct Node * prev=NULL;for(int i=1;i<=n;i++){struct Node * newNode=(struct Node*)malloc(sizeof(struct Node));newNode->data=i;newNode->next=NULL;if(!head){head=newNode;}else{prev->next=newNode;     //尾插法建立单链表 }prev=newNode;               //相当于尾指针 
}
prev->next=head;                //让尾结点的next域指向头结点创建循环链表 
return head;                    //返回头指针,创建完成 
} 
//解决约瑟夫环问题
int josephusProblem(int n,int m){struct Node* current=createCircularList(n);    //储存头结点struct Node* prev=NULL;int c=0;while(current->next!=current){                     //遍历循环链表 for(int i=1;i<m;i++){                          //相当于计数器 prev=current;current=current->next;}prev->next=current->next;                      //删除结点current struct Node * temp=current;c++;int a=current->data;printf("第%d个淘汰者的编号为%d\n",c,a);current=current->next;free (temp);}int result=current->data;free(current);return result;
}
int main(){int n,m;printf("请输入总人数和淘汰数:\n");scanf("%d %d",&n,&m);int lastPerson=josephusProblem(n,m);printf("最后留下的人的编号为:%d\n",lastPerson);return 0;	 
}

以下为详细运行结果 

 一元多项式相加相减

//一元多项式加法
//定义链表结点
#include<stdio.h>
#include<stdlib.h> 
struct Node{int coef;   //系数 int exp;    //指数struct Node * next; 
}; 
//创建多项式
struct Node * createPolynomial(){int n;printf("输入多项式的项数:");scanf("%d",&n);struct Node * head=NULL;struct Node * prev=NULL;for(int i=0;i<n;i++){struct Node * newNode=(struct Node*)malloc(sizeof(struct Node));printf("输入第%d项的系数和指数:",i+1);int coef,exp;scanf("%d %d",&coef,&exp);newNode->coef=coef;newNode->exp=exp;printf("\n");newNode->next=NULL;                   //尾插法建立单链表 if(!head){head=newNode;}else{prev->next=newNode;}prev=newNode;}return head;                             //返回头结点 
} 
//打印多项式
void printPolynomial(struct Node * head){if(!head){                              //如果结果为空,返回0 printf("0\n");}struct Node * current=head;while(current){if(current->coef!=0){if(current->coef>0&&current!=head){  //系数大于0,且不是头指针(即不是第一项)打印加号 printf("+");}if(current->coef==0){                //系数等于0,打印0 printf("0");}else if(current->exp==1){            //如果系数不为0,指数等于1,打印x printf("%dx",current->coef);}else{                                //系数不为0,指数不为1 printf("%dx^%d",current->coef,current->exp);}}current=current->next;}printf("\n");
} 
//一元多项式加法
struct Node* addPolynomial(struct Node* poly1,struct Node* poly2){struct Node* result=NULL;struct Node* prev=NULL;struct Node* current1=poly1;     //current1指向第一个多项式 struct Node* current2=poly2;     //current2指向第二个多项式while(current1&&current2){       //结束条件为其中一个多项式已经遍历完 struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));if(current1->exp>current2->exp){newNode->exp=current2->exp;newNode->coef=current2->coef;current2=current2->next;}else if(current1->exp<current2->exp){newNode->exp=current1->exp;newNode->coef=current1->coef;current1=current1->next;}else{newNode->exp=current1->exp;newNode->coef=current1->coef+current2->coef;current1=current1->next;current2=current2->next;}newNode->next=NULL;          if(!result){               //相当于尾插法建立新的链表用来储存两个多项式相加的值 result=newNode;}else{prev->next=newNode;}prev=newNode;          }while(current1){struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));newNode->coef=current1->coef;newNode->exp=current1->exp;newNode->next=NULL;prev->next=newNode;prev=newNode;current1=current1->next;} while(current2){struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));newNode->coef=current2->coef;newNode->exp=current2->exp;newNode->next=NULL;prev->next=newNode;prev=newNode;current2=current2->next;}return result;
} 
//一元多项式减法
struct Node* subtractPolynomial(struct Node* poly1,struct Node* poly2){struct Node * current2;current2=poly2;while(current2){current2->coef*=-1;current2=current2->next;}return addPolynomial(poly1,poly2);
}
//主函数
int main(){struct Node* poly1=createPolynomial();struct Node* poly2=createPolynomial();printf("多项式1:"); printPolynomial(poly1);printf("多项式2:");printPolynomial(poly2); struct Node* sum=addPolynomial(poly1,poly2);printf("两多项式的和为:");printPolynomial(sum);struct Node* subtract=subtractPolynomial(poly1,poly2);printf("两多项式的差为:");printPolynomial(subtract);
} 

这里注意读入数据时是按照指数从低到高读进来的,所以在比较两个式子的时候应先将较小的指数所在项放在新的链表中;

如果是按照指数从高到低读入数据,两个式子比较的时候应该先将较大的指数所在项放进新的链表中。

详细运行结果如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/141401.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity】 HTFramework框架(五十六)MarkdownText:支持运行时解析并显示Markdown文本

更新日期&#xff1a;2024年9月15日。 Github源码&#xff1a;[点我获取源码] Gitee源码&#xff1a;[点我获取源码] 索引 MarkdownText支持的Markdown语法标题强调文本表格嵌入图像超链接 使用MarkdownText设置项运行时属性解析使用ID模式嵌入图像 MarkdownText MarkdownText…

句子成分——每日一划(八)

目录 一、原句 二、第一部分 三、第二部分 一、原句 In class society everyone lives as a member of a particular class, and every kind of thinking, without exception, is stamped with the brand of a class. 来源&#xff1a;二、阶级和阶级斗争 二、第一部分 In…

QT添加图标标题和打包项目

QT项目打包 项目的标题和图标标题项目图标exe图标 可执行文件——生成exeexe运行报错“找不到qt6gui.dll”等 相关库文件——生成zip安装包打包程序——生成exe安装包 项目的标题和图标 项目打包要好看点&#xff0c;得有个好点的标题和图标&#xff0c;这次打包的项目是我上一…

图论篇--代码随想录算法训练营第五十八天打卡|拓扑排序,dijkstra(朴素版),dijkstra(堆优化版)精讲

拓扑排序 题目链接&#xff1a;117. 软件构建 题目描述&#xff1a; 某个大型软件项目的构建系统拥有 N 个文件&#xff0c;文件编号从 0 到 N - 1&#xff0c;在这些文件中&#xff0c;某些文件依赖于其他文件的内容&#xff0c;这意味着如果文件 A 依赖于文件 B&#xff0…

【移动端】菜单的自动展开与收回

前言 为了满足手机上菜单栏随用户移动&#xff0c;菜单的自动展示与隐藏&#xff0c;特此记录 基本原理 实现逻辑 window.addEventListener(‘scroll’, debouncedScrollHandler) – 监听文档视图滚动事件 document.querySelector(‘.header’) – 选择器匹配元素 创建show和h…

中断门+陷阱门

中断门&#xff1a; 中断描述符在IDT表里面 kd> dq idtr 80b95400 83e48e000008bfc0 83e48e000008c150 80b95410 0000850000580000 83e4ee000008c5c0 80b95420 83e4ee000008c748 83e48e000008c8a8 80b95430 83e48e000008ca1c 83e48e000008d018 80b95440 000085000050…

Tuxera NTFS for Mac 2023绿色版

​ 在数字化时代&#xff0c;数据的存储和传输变得至关重要。Mac用户经常需要在Windows NTFS格式的移动硬盘上进行读写操作&#xff0c;然而&#xff0c;由于MacOS系统默认不支持NTFS的写操作&#xff0c;这就需要我们寻找一款高效的读写软件。Tuxera NTFS for Mac 2023便是其中…

Redis入门2

在java中操作Redis Redis的Java客户端 Redis 的 Java 客户端很多&#xff0c;常用的几种: Jedis Lettuce Spring Data Redis Spring Data Redis 是 Spring 的一部分&#xff0c;对 Redis 底层开发包进行了高度封装。 在 Spring 项目中&#xff0c;可以使用Spring Data R…

DTU远程控制:空巢老人的智慧灌溉方案

我是老刘&#xff0c;大家经常这样唤我。在浙江省台州市下面的一个小乡村里&#xff0c;我经营着一家工厂。 说起台州&#xff0c;是个好地方&#xff0c;这里有一座天台山&#xff0c;就是“一座天台山&#xff0c;半步全唐诗”的那座山&#xff0c;山里有一个大瀑布&#xf…

计算机毕业设计 乡村生活垃圾管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

STM32(十四):USART串口数据包

HEX数据包 0xFF包头&#xff0c;0xFE包尾。 如果数据和包头包尾重复&#xff0c;可能会引起误判。 解决办法&#xff1a; 1. 限制载荷数据的范围 2. 如果无法避免载荷数据和包头包尾重复&#xff0c;就使用尽量使用固定长度数据包。 包头 ‘\r\n 包尾 在载荷数据中间可以出现…

用nginx-rtmp-win32-master及ffmpeg模拟rtmp视频流

效果 使用nginx-rtmp-win32-master搭建RTMP服务 双击exe就可以了。切记整个目录不能有中文 README.md ,启用后本地的RTM路径: rtmp://192.168.1.186/live/xxx ffmpeg将地本地视频推RMTP F:\rtsp\ffmpeg-7.0.2-essentials_build\bin>ffmpeg -re -i F:\rtsp\123.mp4 -c c…

分贝转换 1 mVpp = 9.03dBmV

分贝转换 1 mVpp 9.03dBmV 函数发生器调节如下参数在频谱仪器上能看到9.03dBmv的电压值函数发生器产生 30mVpp 频谱仪会显示多少dBmV 函数发生器调节如下参数 输出频率&#xff1a;10 MHz 波形类型&#xff1a;正弦波 阻抗&#xff1a;50 Ω 幅度&#xff1a;1 mVpp …

CTF-杂项隐藏在数据包中的秘密lol

题目 隐藏在数据包中的秘密 解题 首先分析一下题目&#xff0c;题目给出的是一个流量包&#xff0c;大致浏览一遍是HTTP上网请求流量&#xff0c;直接过滤出http流量包 可以看到&#xff0c;第一个包是用户通过访问网页&#xff0c;然后post提交上传一个文件&#xff0c;下一…

黑马程序员Java笔记整理(day01)

1.windowsR进入运行&#xff0c;输入cmd 2.环境变量 3.编写java第一步 4.使用idea 5.注释 6.字面量 7.变量 8.二进制 9.数据类型 10.关键词与标识符

echarts中tooptips提示框超出了怎么解决

我们在制作echarts表格时&#xff0c;有时候会遇到提示框内容较多&#xff0c;会让提示框超出&#xff0c;展示不全数据&#xff0c;如下&#xff1a; 这种情况下需要在tooltips下增加一些属性&#xff1a; 1.confine: true&#xff1a;这个配置的作用是让提示框&#xff08;t…

关于Softmax,你想知道的都在这里了!

目录 1. 为什么要引入Softmax&#xff1f;2. Softmax的导数计算3. Softmax及其导数的一些性质4. 交叉熵损失的梯度计算5. Softmax的各种变体5.1 Naive Softmax5.2 Safe Softmax5.3 Online Softmax Ref 1. 为什么要引入Softmax&#xff1f; 在进行 n n n 分类任务时&#xff0…

「数组」堆排序 / 大根堆优化(C++)

目录 概述 核心概念&#xff1a;堆 堆结构 数组存堆 思路 算法过程 up() down() Code 优化方案 大根堆优化 Code(pro) 复杂度 总结 概述 在「数组」快速排序 / 随机值优化|小区间插入优化&#xff08;C&#xff09;中&#xff0c;我们介绍了三种基本排序中的冒泡…

四、(JS)JS中常见的加载事件

一、文档加载监听 &#xff08;1&#xff09;抛出疑惑&#xff0c;什么是文档加载监听&#xff1f;为什么要有这个东西&#xff1f; 老样子&#xff0c;我们先讲一个场景&#xff0c;带着大家熟悉为什么会有文档加载监听&#xff0c;是来解决什么问题来着的。 我们先看下这段…

人工智能诱导虚假记忆:MIT最新研究揭示AI与记忆的互动机制

随着人工智能技术的快速发展&#xff0c;ChatGPT等大型语言模型逐渐被应用于多个领域&#xff0c;包括法律、医疗、教育等。然而&#xff0c;随着这些技术的广泛应用&#xff0c;研究人员开始注意到一个潜在的隐患&#xff1a;人工智能不仅可以生成信息&#xff0c;甚至还可能影…