牛客网编程题—【WY22 Fibonacci数列】和【替换空格】详解

꧁   各位大佬们好!很荣幸能够得到您的访问,让我们一起在编程道路上任重道远!꧂

☙ 博客专栏:【牛客网试题】

⛅ 本篇内容简介:详解牛客网试题-WY22 Fibonacci数列与【替换空格】

⭐ 了解作者:励志成为一名编程大牛的学子,目前正在升大二的编程小白。

励志术语:编程道路的乏味,让我们一起学习变得有趣!

✂   正文开始


目录

前言

【WY22 Fibonacci数列】

题目讲解

描述

输入描述:

输出描述:

示例1

解题思路

 源代码

【替换空格】

题目讲解

描述

示例1

示例2

解题思路

源代码

结束语


前言

经过一段时间的学习C语言进阶的内容,迎来了一次测试,很遗憾最后两道编程题我依旧没有想出解题思路,以及完整的写出代码出来!经过听老师的讲解,和自己的理解,应该掌握了解题思路和方法,现在我把这两道题内容和解题方法及源代码分享给大家!

【WY22 Fibonacci数列】

题目讲解

描述

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

输入描述:

输入为一个正整数N(1 ≤ N ≤ 1,000,000)

输出描述:

输出一个最小的步数变为Fibonacci数"

示例1

输入:

15

复制输出:

2

这是一道来着牛客网的一道校园招聘题,我们应该都熟悉斐波那契数吧,而这道题就是如何把输入的一个数 X ,变成 X-1或者 X+1,使得自己变成斐波那契数,而最少需要几步才能变成。

牛客网题目链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66?tpId=122&tqId=33668&ru=/exam/oj

解题思路

我们先初始化斐波那契数的前面两个数,后面是斐波那契数用c来替换就可以了,比如:

int a=0;

int b=1;

int c=a+b;

用循环的方法求后面的斐波那契数

while(1)

{

    c=a+b;

    a=b;

    b=c;

}

这样的形式。

我们假设我们输入的这个数是N,而这个数落在【a,b】之间,当N==b时,我们应该返回0,当N<b时,我们用  | N-a |(绝对值)与| N-b |(绝对值)进行比较,谁小输出谁!

图解:

 源代码

#include<stdio.h>
#include<math.h>
int main()
{
    int N=0;
    scanf("%d",&N);//自己输入的那个数
    int a=0;
    int b=1;
    int c=a+b;//定义c
    while(1)
    {
        if(N==b)//这个数直接是斐波那契数时
        {
            printf("0\n");
            break;
        }
        else if(N<b)
        {
           if(abs(a-N)>abs(b-N)) //注意 abs是绝对值的,需要引用头文件
           {
               printf("%d\n",abs(b-N));//输出小的
           }
            else
            {
                printf("%d\n",abs(a-N));//
            }
            break;
        }
        c=a+b;//求后面的斐波那契数
        a=b;
        b=c;
    }
    return 0;
}

【替换空格】

题目讲解

描述

请实现一个函数,将一个字符串s中的每个空格替换成“%20”。

例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

数据范围:0 \le len(s) \le 1000 \0≤len(s)≤1000 。保证字符串中的字符为大写英文字母、小写英文字母和空格中的一种。

示例1

输入:

"We Are Happy"

复制返回值:

"We%20Are%20Happy"

复制

示例2

输入:

" "

复制返回值:

"%20"

牛客网题目链接:https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423

解题思路

思路:我们先从头遍历一遍,看有多少个空格,每遇到一个空格就使字符串+2一下,再假设两个下标,一个为end1放在原来字符串的末尾,另一个下标为end2放在加长后的字符串后的末尾,每次当end1--的时候,不是空格时,str[end2]=str[end1],替换一下,当end1--时遇到空格时,使
str[end2--]='0';//同时--一下
str[end2--]='2';
str[end2--]='%';
end1--;
当前面没有空格时,end1会==end2,这就是循环停止的条件!

图解:

源代码

class Solution {
public:
	void replaceSpace(char *str,int length) {
        //先遍历一遍 看 空格的个数
        char* ps=str;
        int count=0;
        while(*ps!='\0')
        {
            if(*ps==' ')
            count++;
            ps++;
        }
        int end1=length-1;//定义原来末尾的下标
        int end2=length+count*2-1;//变长后的末尾下标
        while(end1!=end2)
        {
            if(str[end1]!=' ')
            {
                str[end2--]=str[end1--];
            }
            else{
                
               str[end2--]='0';
                str[end2--]='2';
                str[end2--]='%';
                end1--;
            }
        }
	}
};

结束语

此博客为了让大家对这两道牛客网的题更加深刻的了解,觉得讲得不错,可以给博主三连哦!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甘宸しぐれ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值