分享免费的编程资源和教程

网站首页 > 技术教程 正文

2024年1月19日,C语言面试题目:Z字形变换

goqiw 2024-10-08 06:37:13 技术教程 7 ℃ 0 评论

学习工控知识,就来工控小新


农历腊月初九 2024/1/ 19


往期推荐

2024年1月17日,数独游戏怎么玩?

2024年1月16日,每日一分钟学习C语言,学习路上不能停

每日一练

/ Daily Exercises

Z 字形变换

将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行Z字形排列。

比如输入字符串为"PAYPALISHIRING"行数为3时,排列如下:

RHAN

A PLSIIG

上个R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。



题目分析

一、问题分析

Z字形变换是一种常见的字符串处理问题。在这个问题中,我们需要将一个给定的字符串按照Z字形排列,然后从左到右逐行读取,生成一个新的字符串。


二、解题思路

解决这个问题的关键在于理解Z字形排列的规则。我们可以观察到,Z字形排列实际上是将字符串的字符按照特定的顺序重新排列。在给定的行数为n的情况下,每个Z字形的长度为2n-2。因此,我们可以通过计算每个字符在Z字形中的位置,然后根据这个位置将字符放入正确的行中。


程序展示

以下是在VC6.0环境下运行调试的C语言程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* convert(char* s, int numRows)
{
    if (numRows == 1) return s;
    int len = strlen(s);
    char* ret = (char*)malloc((len + 1) * sizeof(char));
    int cycleLen = 2 * numRows - 2;
    int k = 0;
    for (int i = 0; i < numRows; i++) 
  {
        for (int j = 0; j + i < len; j += cycleLen) 
    {
            ret[k++] = s[j + i];
            if (i != 0 && i != numRows - 1 && j + cycleLen - i < len)
                ret[k++] = s[j + cycleLen - i];
        }
    }
    ret[k] = '\0';
    return ret;
}
int main() 
{
    char s[] = "PAYPALISHIRING";
    int numRows = 3;
    char* ret = convert(s, numRows);
    printf("%s\n", ret);
    free(ret);
    return 0;
}



程序测试

运行上述代码,在VC6.0的环境下,可以得到如下的输出:


这与题目给出的结果一致,说明我们的算法是正确的。

源代码获取

#软件下载通道#



我用夸克网盘分享了「20240117」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。

链接:https://pan.quark.cn/s/925acf4fc36a

(链接和提取码建议复制粘贴,手动输入容易出现错误)

#支持一下#

分享整理,测试发布不易 如果您方便的话可以帮忙点一下↓↓

谢谢大家!




下期题目

外观数列

给定一个正整数n,输出外观数列的第n项。

「外观数列」是一个整数序列,从数字1开始,序列中的每一项都是对前一项的描述。

你可以将其视作是由递归公式定义的数字字符串列:

countAndSay(1)="1"

countAndSay(n)是对countAndSay(n-1)的描述,然后转换成另一个数字字符串。

前五项如下:

1

2

3.

4.

5.

1 1

21

1211

111221

第一项是数字 1

描述前一项,这个数是1即“一个1",记作"11"描述前一项,这个数是11即“二个1”,记作"2描述前一项,这个数是21即"一个2+一个1'描述前一项,这个数是1211即"一个1+-个要 描述 一个数字字符串,首先要将字符串分割为 最小数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。



点赞加关注,学习不迷路

微信公众号|工控小新

EPLAN电气绘图、TIA博图基础 、CAD、C语言教学、单片机基础、三菱PLC ... 每日持续更新中

#新豪华 新智享#

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表