洛谷 P1067 [NOIP2009 普及组] 多项式输出

2024-02-11 19:04

本文主要是介绍洛谷 P1067 [NOIP2009 普及组] 多项式输出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。
因此,若需转载/引用本文,请注明作者并附原文链接,且禁止删除/修改本段文字。
违者必究,谢谢配合。
个人主页:blog.csdn.net/jzwalliser

题目

洛谷 P1067 [NOIP2009 普及组] 多项式输出

[NOIP2009 普及组] 多项式输出

题目描述

一元 n n n 次多项式可用如下的表达式表示:

f ( x ) = a n x n + a n − 1 x n − 1 + ⋯ + a 1 x + a 0 , a n ≠ 0 f(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots +a_1x+a_0,a_n\ne 0 f(x)=anxn+an1xn1++a1x+a0,an=0

其中, a i x i a_ix^i aixi 称为 i i i 次项, a i a_i ai 称为 i i i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:

  1. 多项式中自变量为 x x x,从左到右按照次数递减顺序给出多项式。

  2. 多项式中只包含系数不为 0 0 0 的项。

  3. 如果多项式 n n n 次项系数为正,则多项式开头不出 + 号,如果多项式 n n n 次项系数为负,则多项式以 - 号开头。

  4. 对于不是最高次的项,以 + 号或者 - 号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于 0 0 0 次的项,其系数的绝对值为 1 1 1,则无需输出 1 1 1)。如果 x x x 的指数大于 1 1 1,则接下来紧跟的指数部分的形式为“ x b x^b xb”,其中 b b b x x x 的指数;如果 x x x 的指数为 1 1 1,则接下来紧跟的指数部分形式为 x x x;如果 x x x 的指数为 0 0 0,则仅需输出系数即可。

  5. 多项式中,多项式的开头、结尾不含多余的空格。

输入格式

输入共有 2 2 2

第一行 1 1 1 个整数, n n n,表示一元多项式的次数。

第二行有 n + 1 n+1 n+1 个整数,其中第 i i i 个整数表示第 n − i + 1 n-i+1 ni+1 次项的系数,每两个整数之间用空格隔开。

输出格式

输出共 1 1 1 行,按题目所述格式输出多项式。

样例 #1

样例输入 #1

5 
100 -1 1 -3 0 10

样例输出 #1

100x^5-x^4+x^3-3x^2+10

样例 #2

样例输入 #2

3 
-50 0 0 1

样例输出 #2

-50x^3+1

提示

NOIP 2009 普及组 第一题

对于100%数据, 0 < n < 100 0 < n < 100 0<n<100 − 100 < -100 < 100< 系数 < 100 < 100 <100


upd 2022.8.1 \text{upd 2022.8.1} upd 2022.8.1:新增加一组 Hack 数据。

想法

先处理带有 x x x的多次项,最后再单独处理一次项和常数项。对于每一项,都判断其是否是正数,如果是就加上正号,否则就是负号。特殊地,如果是 0 0 0那就略过这一项。最后为了防止被hack,需要考虑一些特殊情况,如只有常数项。

实现

  1. 输入时候注意多一项。
  2. 处理带有 x x x的项。
  3. 处理字符串,删除多余内容。
  4. 加上一次项和常数项。
  5. 输出。

题解

C++

#include<bits/stdc++.h>
using namespace std;string str = "";
int nums[105];
string to_str(long long int num){stringstream ss; //创建stringstream流string str;ss << num; //num流入stringstreamss >> str; //stringstream流入strreturn str;
}int main(){int n;cin >> n; //输入for(int i = 0;i <= n;i++){ //注意输入的时候会多一项cin >> nums[i];}if(n == 0){ //如果只有常数项cout << nums[0]; //输出return 0; //退出}for(int i = 0;i < n;i++){if(nums[i] == 1){str += "+x^" + to_str(n - i); //系数为1则不需要输出1}else if(nums[i] == -1){str += "-x^" + to_str(n - i); //同样,系数为-1则不需要输出-1}else if(nums[i] == 0){//如果系数为0则跳过这一项}else{if(nums[i] > 0){ //如果是正数那就需要放个加号str += "+";}str += to_str(nums[i]) + "x^" + to_str(n-i); //最后加上次数}}if(str[str.size() - 1] == '1'){ //单独处理一次项,那就删掉字符串末尾的“^1”str = str.substr(0,str.size() - 2);}if(str[0] == '+'){ //如果头上是加号那就删掉第一个字符(因为刚开始在处理多次项的时候所有正数都会在前面家正号)str = str.substr(1,str.size() - 1);}if(nums[n] > 0){ //正常数str += "+" + to_str(nums[n]);}else if(nums[n] < 0){ //负常数str += to_str(nums[n]);}cout << str; //输出return 0;
}

Python

import sys
n = int(input()) #输入
string = ""
nums = input().split()
if n == 0: #如果只有常数项print(nums[0]) #输出sys.exit() #退出for i in range(len(nums)):nums[i] = int(nums[i])for i in range(n):if nums[i] == 1:string += "+x^" + str(n - i) #系数为1则不需要输出1elif nums[i] == -1:string += "-x^" + str(n - i) #同样,系数为-1则不需要输出-1elif nums[i] == 0:pass #如果系数为0则跳过这一项else:if nums[i] > 0: #如果是正数那就需要放个加号string += "+"string += str(nums[i]) + "x^" + str(n-i) #最后加上次数if string[-1] == "1": #单独处理一次项,那就删掉字符串末尾的“^1”string = string[:-2]
if string[0] == "+": #如果头上是加号那就删掉第一个字符(因为刚开始在处理多次项的时候所有正数都会在前面家正号)string = string[1:]
if int(nums[-1]) > 0: #正常数string += "+" + str(nums[-1])
elif int(nums[-1]) < 0: #负常数string += str(nums[-1])
print(string) #输出

难度

难度:★★☆☆☆
题目还是比较容易的,只是里面的操作比较复杂,情况有许多种,需要考虑周到,并写大量的if语句。

结尾

你是怎么想的?欢迎分享您的想法,我们下期再见~~(˵¯͒〰¯͒˵)

这篇关于洛谷 P1067 [NOIP2009 普及组] 多项式输出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/700594

相关文章

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

如何将一个文件里不包含某个字符的行输出到另一个文件?

第一种: grep -v 'string' filename > newfilenamegrep -v 'string' filename >> newfilename 第二种: sed -n '/string/!'p filename > newfilenamesed -n '/string/!'p filename >> newfilename

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形

LibSVM学习(五)——分界线的输出

对于学习SVM人来说,要判断SVM效果,以图形的方式输出的分解线是最直观的。LibSVM自带了一个可视化的程序svm-toy,用来输出类之间的分界线。他是先把样本文件载入,然后进行训练,通过对每个像素点的坐标进行判断,看属于哪一类,就附上那类的颜色,从而使类与类之间形成分割线。我们这一节不讨论svm-toy怎么使用,因为这个是“傻瓜”式的,没什么好讨论的。这一节我们主要探讨怎么结合训练结果文件

下载/保存/读取 文件,并转成流输出

最近对文件的操作又熟悉了下;现在记载下来:学习在于 坚持!!!不以细小而不为。 实现的是:文件的下载、文件的保存到SD卡、文件的读取输出String 类型、最后是文件转换成流输出;一整套够用了; 重点: 1:   操作网络要记得开线程; 2:更新网络获取的数据 切记用Handler机制; 3:注意代码的可读性(这里面只是保存到SD卡,在项目中切记要对SD卡的有无做判断,然后再获取路径!)

彻底解决win10系统Tomcat10控制台输出中文乱码

彻底解决Tomcat10控制台输出中文乱码 首先乱码问题的原因通俗的讲就是读的编码格式和写的解码格式不一致,比如最常见的两种中文编码UTF-8和GBK,UTF-8一个汉字占三个字节,GBK一个汉字占两个字节,所以当编码与解码格式不一致时,输出端当然无法识别这是啥,所以只能以乱码代替。 值得一提的是GBK不是国家标准编码,常用的国标有两,一个是GB2312,一个是GB18030 GB1

lesson1 输出出现重复行的文件名称

lesson1 输出出现重复行的文件名称 1. 代码 package mainimport ("bufio""fmt""io""os")/*** @Author: jiaona.chen* @Description:* @File: main* @Version: 1.0.0* @Date: 2024/09/07 15:25*/// 输出出现重复行的文件名称func main() {ty

Matplotlib图像读取和输出及jpg、png格式对比,及透明通道alpha设置

图像像素值 图像像素值一般size为3,也就是通道数,分别代表R,G,B,如果只有单一 一个值则表示灰度值,也就是说一张二维图片,当长和宽都为1080时,那么若是灰度图像,图像尺寸为(1080,1080,1)若是RGB图像则为(1080,1080,3), jpg、png图像格式 jpg图像的灰度值范围和RGB范围为[0,255],数值类型为uint8,也就是无符号整数 png图像的灰度值范