【模拟】多项式输出 & 蛇形方阵 & 字符串展开

目录

一、多项式输出

二、蛇形方阵

三、字符串展开


一、多项式输出

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

答案如下:

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

int main()
{
	int n; cin >> n;
	for(int i = n; i >= 0; i--)
	{
		int a; cin>>a;
		if(a == 0) continue;
		
		//符号
		if(a < 0)
		{
			cout << '-';
		}
		else{
			if(i != n)
			{
				cout << '+';
			}
		}
		
		//数字
		a = abs(a);
		if(a != 1 || (a == 1 && i == 0))
		{
			cout << a;
		}
		
		//次幂 
		if(i == 1)
		{
			cout<<'x';
		}
		else if (i > 1)
		{
			cout << "x^" << i;
		} 
	}
	return 0;
} 

二、蛇形方阵

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

答案如下:

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

int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};

const int N = 15;

int arr[N][N];

int main()
{
	int n; cin >> n;
	int x = 1, y = 1;
	int pos = 0;
	int cnt = 1;
	while(cnt <= n*n)
	{
		arr[x][y] = cnt;
		int a = x + dx[pos];
		int b = y + dy[pos];
		
		if(a<1 || a>n || b<1 || b>n || arr[a][b])
		{
			pos = (pos+1)%4;
			a = x + dx[pos];
			b = y + dy[pos]; 
		}
		x = a; y = b;
		cnt++;
	}
	
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= n; j++)
		{
			printf("%3d",arr[i][j]); 
		}
		cout << endl;
	}
	return 0;
} 

三、字符串展开

P1098 NOIP 2007 提高组 字符串的展开 - 洛谷

答案如下:

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

int p1,p2,p3;
string s;
int n;
string ret; 

bool IsDigit(char ch)
{
	return ch >= '0' && ch <= '9';
}

bool IsLeter(char ch)
{
	return ch >= 'a' && ch <= 'z';
}

void add(char left, char right)
{
	string str;
	for(char ch = left + 1; ch < right; ch++)
	{
		char tmp = ch;
		
		//处理p1
		if(p1 == 2 && IsLeter(ch))
		{
			tmp -= 32;
		}
		else if(p1 == 3)
		{
			tmp = '*';
		}
		
		//处理p2
		for(int i = 1; i <= p2; i++)
		{
			str += tmp;
		}
	}
	//处理p3
	if(p3 == 2)
	{
		reverse(str.begin(), str.end());
	} 
	ret += str;
}

int main()
{
	cin>>p1>>p2>>p3>>s;
	n = s.size();
	for(int i = 0; i < n; i++)
	{
		char ch = s[i];
		if(ch != '-' || i == 0 || i == n-1)
		{
			ret += ch;
		}
		else{
			char left = s[i-1];
			char right = s[i+1];
			if((IsDigit(left) && IsDigit(right) && left < right)
			|| (IsLeter(left) && IsLeter(right) && left < right))
			{
				//展开
				add(left ,right); 
			}
			else{
				ret += ch;
			}
		}
	}
	cout << ret << endl;
	return 0;
} 
相关推荐
码匠许师傅3 分钟前
【C++ 面试真题】19. 聊聊 C++ 的迭代器
开发语言·c++·面试
iNeuOS工业互联网5 分钟前
iNeuOS_Vision_视觉分析,增加SAM3模型对实例分割和目标检测AI自动标注图片样本功能
人工智能·算法·目标检测
qeen8715 分钟前
【数据结构】红黑树的算法原理解析与实现
开发语言·数据结构·c++·算法·红黑树
码匠许师傅1 小时前
【C++ 面试真题】20. 聊聊 C++ 的标准库常用算法
c++·算法·面试
m0_547486661 小时前
《数据结构与算法(Python语言版)》全套PPT课件2026
数据结构·算法
个 人 练 习 生2 小时前
数据结构入门:算法复杂度
开发语言·数据结构·经验分享·学习·程序人生·算法
白色冰激凌2 小时前
[SECS/GEM研究] (六)SML与数据序列化
c++·secs/gem
Ricardo-Yang2 小时前
无人机单目深度估计测试:ZipDepth 与 AerialMetric
人工智能·算法·机器学习·计算机视觉·无人机
_小柏_2 小时前
总结下最近面试出现的问题
c++·面试
Nil2082 小时前
golang解决单词转换
算法