算法——模拟

一、多项式输出

P1067 [NOIP 2009 普及组] 多项式输出 - 洛谷

题目描述

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

f(x)=an​xn+an−1​xn−1+⋯+a1​x+a0​,an​≠0

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

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

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

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

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

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

输入格式

输入共有 2 行。

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

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

输出格式

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

输入输出样例

输入 #1复制运行

复制代码
5 
100 -1 1 -3 0 10

输出 #1复制运行

复制代码
100x^5-x^4+x^3-3x^2+10

输入 #2复制运行

复制代码
3 
-50 0 0 1 

输出 #2复制运行

复制代码
-50x^3+1 

说明/提示

NOIP 2009 普及组 第一题

对于100%数据,0≤n≤100,−100≤系数≤100


upd 2022.8.1:新增加一组 Hack 数据。

cpp 复制代码
#include<iostream>
#include<cmath>
using namespace std;

int main()
{
	int n;
	cin >> n;
	int i = 0;
	int x;
	for (i = n;i >= 0;i--)
	{
		cin>>x;
        if(x==0)
            continue;

        //符号
        if(x>0 && i!=n)
            cout<<"+";
        else if(x<0)
            cout<<"-";

        //数字
        x=abs(x);
        if(x!=1 ||(x==1&&i==0))
            cout<<x;

        //次数
        if(i>1)
            cout<<"x^"<<i;
        else if(i==1)
            cout<<"x";
        
	}
    if (n == 0 && x == 0)
	cout << "0";
	return 0;
}

二、矩阵填数

P5731 【深基5.习6】蛇形方阵 - 洛谷

题目描述

给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。

从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。

输入格式

输入一个正整数 n,含义如题所述。

输出格式

输出符合题目要求的蛇形矩阵。

输入输出样例

输入 #1复制

复制代码
4

输出 #1复制

复制代码
  1  2  3  4
 12 13 14  5
 11 16 15  6
 10  9  8  7

说明/提示

数据保证,1≤n≤9。

1.定义方向向量

2.根据规则结合方向向量填数

①朝一个方向走,一边走一边填数,直到越界

如图:(1,5)已经越界。

②越界之后,结合方向向量,重新计算出新的坐标以及方向

判断越界:坐标越界+已经填过数

更新pos的值:pos=(pos+1)%4

cpp 复制代码
#include<iostream>
using namespace std;
//定义右、下、左、上四个方向
int dx[] = { 0,1,0,-1 };
int dy[] = { 1,0,-1,0 };
int arr[20][20];
int main()
{
	int n = 0;
	cin >> n;
	//当前位置要填的数
	int cnt = 0;
	//初始位置
	int x = 1;
	int y = 1;
	//当前的方向
	int pos = 0;
	int i = 0;
	int j = 0;
	while (cnt < n * n)
	{
		cnt++;
		arr[x][y] = cnt;
		//计算下一个位置
		int a = x + dx[pos];
		int b = y + dy[pos];
		//判断是否越界
		if (a > n || a<1 || b>n || b < 1 || arr[a][b] != 0)
		{
			//更新出正确的位置
			pos = (pos + 1) % 4;
			a = x + dx[pos];
			b = y + dy[pos];
		}
		x = a;
		y = b;
	}
	for (i = 1;i <= n;i++)
	{
		for (j = 1;j <= n;j++)
			printf("%3d", arr[i][j]);
		cout << endl;
	}
	return 0;
}
相关推荐
DeepVis Research2 小时前
【Chaos/Neuro】2026年度混沌动力学仿真与机器遗忘算法基准索引 (Benchmark Index)
人工智能·算法·数据集·混沌工程·高性能计算
white-persist2 小时前
【内网运维】Netstat与Wireshark:内网运维溯源实战解析
运维·网络·数据结构·测试工具·算法·网络安全·wireshark
会员果汁2 小时前
7.设计模式-模板方法模式
算法·设计模式·模板方法模式
努力学算法的蒟蒻2 小时前
day52(1.2)——leetcode面试经典150
算法·leetcode·面试
java修仙传2 小时前
力扣hot100:字符串解码
算法·leetcode·职场和发展
Joe_Blue_022 小时前
Matlab入门案例介绍—如何创建代码
算法·matlab·matlab基础入门案例介绍
梭七y2 小时前
【力扣hot100题】(116)矩阵置零
算法·leetcode·矩阵
应用市场2 小时前
# 内容平台推荐算法与创作者激励机制——从抖音/B站看流量分配的技术逻辑
算法·机器学习·推荐算法
啊董dong3 小时前
noi-2025年12月23号作业
数据结构·c++·算法·noi