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

目录

一、多项式输出

二、蛇形方阵

三、字符串展开


一、多项式输出

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;
} 
相关推荐
木木子222 小时前
# 密码强度检测深度解析:正则表达式实时分析、多维度评分算法与可视化反馈
mysql·算法·华为·正则表达式·harmonyos
Sw1zzle5 小时前
算法入门(四):二叉树 - 递归遍历三件套
算法·leetcode
万法若空6 小时前
【算法-查找】查找算法
java·数据结构·算法
海石6 小时前
子树怎么找?树的3种遍历方式来帮忙!
算法·leetcode
海石6 小时前
难度分 1588:思路 + 技巧 = AC
算法·leetcode
殳翰6 小时前
下服务器端开发流程及相关工具介绍(C++)
开发语言·c++
青瓦梦滋7 小时前
协议定制/序列化-反序列化(Linux视角)
linux·服务器·网络·c++
珠海西格电力9 小时前
云边端协同架构:零碳园区管理系统的技术底座
大数据·运维·人工智能·算法·架构·能源
山登绝顶我为峰 3(^v^)311 小时前
C/C++ 交叉编译方法
java·c语言·c++
还有多久拿退休金11 小时前
让飞书知识库跟着 commit 自己长:一套自动化知识库的真实实现
前端·算法·架构