1.模拟算法

一.多项式输出

https://www.luogu.com.cn/problem/P1067

1.算法原理

2.代码实现

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;
        }

        //1. 符号
        if(a < 0)
        {
            cout << "-";
        }
        else
        {
            if(i != n)
            {
                cout << "+";
            }
        }

        //2.数字
        a = abs(a);
        if(a != 1 || (a == 1 && i == 0))
        {
            cout << a;
        }

        //3.次数
        if(i == 0)
        {
            continue;
        }
        else if(i == 1)
        {
            cout << 'x';
        }
        else
        {
            cout << "x^" << i;
        }
    }
    return 0;
}

二.蛇形方阵

https://www.luogu.com.cn/problem/P5731

1.算法原理

方向向量的定义的顺序也是有方法的(要符合我们的顺序):

我们的pos要不越界,那么我们就要对其进行取模操作

2.代码实现

cpp 复制代码
#include <iostream>
#include <cmath>

using namespace std;

const int N = 15;

//定义 右,下,左,上 四个方向
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};

int arr[N][N];

int main()
{
    int n;
    cin >> n;

    int x = 1,y = 1; //初始位置
    int cnt = 1;     //当前位置
    int pos = 0;     //当前的方向

    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]);
        }
        printf("\n");
    }


    return 0;
}

三.字符串的展开

https://www.luogu.com.cn/problem/P1098

1.算法原理

2.代码实现

cpp 复制代码
#include <iostream>
#include <string.h>
#include <algorithm>

using namespace std;

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

//判断是否是数字
bool isdig(char ch)
{
    return ch >= '0' && ch <= '9';
}

//判断是否是小写字母
bool islet(char ch)
{
    return ch >= 'a' && ch <= 'z';
}

//[left,right]之间的字符进行展开
void add(char left,char right)
{
    string t;
    for(char ch = left + 1;ch < right; ch++)
    {
        //p1
        char tmp = ch;
        if(p1 == 2 && islet(tmp))
        {
            tmp -= 32;
        }
        else if(p1 == 3)
        {
            tmp = '*';
        }

        //p2
        for(int i = 0;i < p2;i++)
        {
            t += tmp;
        }
    }
    //p3
    if(p3 == 2)
    {
        reverse(t.begin(),t.end());
    }
    ret += t;
}

int main()
{
    cin >> p1 >> p2 >> p3 >> s;
    n = s.size();
    for(int i = 0;i < n; i++)
    {
        char ch = s[i];
        if(s[i] != '-' || i == 0 || i == n-1)
        {
            ret += ch;
        }
        else
        {
            char left = s[i - 1],right = s[i + 1];
            //判断是否展开
            if(isdig(left) && isdig(right) && right > left ||
               islet(left) && islet(right) && right > left)
            {
                //展开
                add(left,right);
            }
            else
            {
                ret += ch;
            }
        }
    }
    cout << ret << endl;
    return 0;
}
相关推荐
格林威13 分钟前
工业相机Chunk功能全解析:图像嵌入时间戳、编码器元数据(附堡盟C#代码)
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
小大宇40 分钟前
Python 集成 Conda
开发语言·python·conda
ShineWinsu43 分钟前
对于Linux:模版方法类的解析以及socket、TcpSocket的封装
linux·c++·面试·socket·模板方法模式·封装·tcpsocket
还是奇怪1 小时前
Simon Willison 用 DSPy 优化 Datasette Agent 提示词:提示工程正在变成可测试的软件工程
java·开发语言·软件工程
稚南城才子,乌衣巷风流2 小时前
ST 表(Sparse Table)算法详解:原理、实现与应用
算法
hold?fish:palm2 小时前
9 找到字符串中所有字母异位词
c++·算法·leetcode
小大宇2 小时前
python flask框架 SSE流式返回、跨域、报错
开发语言·python·flask
Legendary_0082 小时前
LDR6500 设计指南:Type-C 音频快充二合一配件 PD 取电与插拔时序控制方案
c语言·开发语言·音视频
Sw1zzle2 小时前
算法入门(六):贪心算法 - 基础入门(Leetcode 121/455/860/376/738)
算法·leetcode·贪心算法
青山木2 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先