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

news2024/9/23 18:11:26

这里先附上上一篇博文的链接大家可以对比着看,错误已经改正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.coloradmin.cn/o/2138501.html

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

相关文章

哈夫曼编码——CSP-J1真题讲解

假设有一组字符{a,b,c,d,e,f}&#xff0c;对应的频率分别为5%、9%、12%、13%、16%、45%。请问以下哪个选项是字符a,b,c,d,e,f分别对应的一组哈夫曼编码?( ) A. 1111&#xff0c;1110&#xff0c;101&#xff0c;100&#xff0c;110&#xff0c;0 B. 1010&#xff0c;1001&…

视频工具EasyDarwin生成RTMP给WVP拉流列表

效果 运行 登录 http://127.0.0.1:10086/ admin/admin 创建RTMP服务

离线数仓ODS层准备

离线数仓ODS层设计-Operational Data Store ODS层设计要点ODS层-日志表-json表SERDEhive导入json表&#xff08;hive表和json表 字段不一致 解决方案&#xff09; 复杂数据类型日志表-建表语句 ODS层设计要点 &#xff08;1&#xff09;ODS层的表结构设计依托于从业务系统同步…

Qt 菜单栏、工具栏、状态栏、标签、铆接部件(浮动窗口) 设置窗口核心部件(文本编辑控件)的基本使用

效果 代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QToolBar> #include<QDebug> #include<QPushButton> #include<QStatusBar> #include<QLabel> #include<QDockWidget> #include<QTextEdi…

第1步win10宿主机与虚拟机通过NAT共享上网互通

VM的CentOS采用NAT共用宿主机网卡宿主机器无法连接到虚拟CentOS 要实现宿主机与虚拟机通信&#xff0c;原理就是给宿主机的网卡配置一个与虚拟机网关相同网段的IP地址&#xff0c;实现可以互通。 1、查看虚拟机的IP地址 2、编辑虚拟机的虚拟网络的NAT和DHCP的配置&#xff0c;…

springboot3.X版本集成mybatis遇到的问题

由于我本地springboot为3.x版本&#xff0c;如下图所示&#xff0c;最新版本 当我参照如下搜索的内容去集成mybatis的时候&#xff0c;会出现各种各样的报错 最根本的原因是搜出来的配置是参照springboot2.X版本&#xff0c;当我们使用springboot3.x版本之后&#xff0c;需要配…

【C++】STL--string(上)

前言 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需要用户自己管理&#xff0c;稍不留…

8个前端库-小且美

前提&#xff1a;前端有很多小而美的库&#xff0c;接入成本很低又能满足日常开发需求&#xff0c;同时无论是 npm 方式引入还是直接复制到本地使用都可以。 1.radash radash相比与 lodash&#xff0c;更加面向现代&#xff0c;提供更多新功能&#xff08;tryit&#xff0c;…

前端层面----监控与埋点

前言&#xff1a; 站在产品的视角&#xff0c;经常会问如下几个问题&#xff1a; 产品有没有用户使用 用户用得怎么样 系统会不会经常出现异常 如何更好地满足用户需求服务用户 当站在技术视角时&#xff0c;经常会问如下几个问题&#xff1a; 系统出现异常的频率如何 异常…

MyBatis中多对一关系的三种处理方法

目录 MyBatis中多对一关系的三种处理方法 1.通过级联属性赋值 1&#xff09;mapper 2&#xff09;mapper.xml 3&#xff09;测试代码 4&#xff09;测试结果 2.通过标签 1&#xff09;mapper 2&#xff09;mapper.xml 3&#xff09;测试代码 4&#xff09;测试结果 3.分步查询 …

【技术调研】三维(4)-ThreeJs阴影投射、光线投射及案例

阴影投射 阴影是灯光经过物体后产生的&#xff0c;几个关键的设置&#xff1a; 灯光属性设置&#xff1a;.castShadow : Boolean 。此属性设置为 true 灯光将投射阴影。注意&#xff1a;这样做的代价比较高&#xff0c;需要通过调整让阴影看起来正确。 查看 DirectionalLight…

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

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

代码23. 合并 K 个升序链表

模拟面试的时候没做出来&#xff0c;心碎了。 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 自己的思考 无思考&#xff0c;直接看答案吧。 正确答案 其实写还是自己写的&#xff0c;看了下题解的思路。 第一种 思路简单&#xff0c;两两合并&#xff0c;注意事项已…

李飞飞任CEO,空间智能公司World Labs亮相,全明星阵容曝光

人工智能的下个大方向已经出现&#xff0c;标志性学者决定下场创业。 本周五&#xff0c;一个重磅消息引爆了 AI 圈&#xff1a;斯坦福大学计算机科学家李飞飞正式宣布创办 AI 初创公司 ——World Labs&#xff0c;旨在向人工智能系统传授有关物理现实的深入知识。 李飞飞说道&…

【检索快,IEEE独立出版】2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024)

大会简介&#xff1a; 2024年第四届电子信息工程与计算机科学国际会议&#xff08;EIECS 2024&#xff09;将于2024年9月27日至29日在中国延吉举行。会议由长春理工大学主办&#xff0c;延边大学、长春理工大学电子信息工程学院、长春理工大学计算机科学技术学院、长春理工大学…

数据结构——栈和队列(栈的顺序存储结构和链式存储结构)

栈的定义 栈是一种重要的线性结构&#xff0c;可以这样讲&#xff0c;栈是前面讲过的线性表的一种具体形式。就像我们刚才的例子&#xff0c;栈这种后进先出的数据结构应用是非常广泛的。在生活中&#xff0c;例如我们的浏览器&#xff0c;每次点击一次“后退”都是退回到最近…

数据库密钥管理的密钥生成

数据库密钥管理是指对数据库中使用的加密密钥进行的一系列安全操作&#xff0c;以确保数据的机密性、完整性和可用性。这一管理过程通常包括密钥的生成、存储、分发、使用和销毁等环节。以下是关于数据库密钥管理的详细解析&#xff1a; 一、密钥的生成 目的&#xff1a;生成用…

谷歌图像生成AI-imagen 3新手入门指南!

1Google 最近推出了 Imagen 3&#xff0c;这是目前为止其最先进的文本生成图像模型。它基于之前的版本进行了改进&#xff0c;提供了更加精确的图像生成&#xff0c;减少了图像中的瑕疵&#xff0c;能够生成逼真、栩栩如生的图像。相比于早期版本&#xff0c;Imagen 3 可以处理…

Linux:重定向以及管道

重定向&#xff08;重新定向命令的输出&#xff09; 将前面命令的输出&#xff0c;作为内容&#xff0c;写入到后面的文件 管道 管道&#xff08;操作符号 | &#xff09; 作用&#xff1a;将前面命令的输出&#xff0c;传递给后面命令&#xff0c;作为后面命令的参数…

通信工程学习:什么是SNI业务节点接口

SNI&#xff1a;业务节点接口 SNI业务节点接口&#xff0c;全称Service Node Interface&#xff0c;是接入网&#xff08;AN&#xff09;和一个业务节点&#xff08;SN&#xff09;之间的接口&#xff0c;位于接入网的业务侧。这一接口在通信网络中扮演着重要的角色&#xff0c…