优快云周赛63期分析

优快云周赛63期

1电费问题

题目

月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少

代码

#include <stdio.h>

int main()
{
    int n;
    double money;
    scanf("%d",&n);

    if (n <= 150)
        money = n * 0.4463;
    else if (n > 150)
    {
        money = 150 * 0.4463;
        if (n <= 400)
            money += (n-150) * 0.4663;
        else
        {
            money += (400-150) * 0.4663;
            money += (n - 400) * 0.5663;
        }
    }
    printf("%.1f",money);
    return 0;
}

2.恶龙咆哮-逃离城堡

题目说明

饿龙咆哮,饿偶!饿偶!饿偶偶!
小艺酱误入龙族结界,被恶龙带回城堡,准备当作新娘。
可是小艺酱怎么可能嫁给一个吃不饱穿不好的饿龙呢?
小艺酱决定逃离城堡,逃离龙族结界,总路程为c。
小艺酱的速度是vp,饿龙速度为vd。饿龙会在t小时后发现小艺酱出逃。
小艺酱担心自己跑不出去,准备了好多珍宝。
每当饿龙追上自己的时候小艺酱就会丢下一个珍宝,饿龙捡到珍宝会返回自己的城堡进行研究,研究f小时后,再出城堡追赶小艺。
小艺想知道自己至少需要丢多少珍宝才能让自己安全逃出结界。

代码

#include <stdio.h>

int main()
{
    int vp,vd,t,f,c;
    scanf("%d%d%d%d%d",&vp,&vd,&t,&f,&c);

    if (vp >= vd)
    {
        printf("0");
        return 0;
    }

    double d = t * vp;  // 距离城堡的距离,要用浮点型,因为后面的距离可能不是整数
    int n = 0;
    while(d < c)
    {
        double x = d / (vd - vp);  // 恶龙从城堡出发,女孩距离城堡d,x小时后追上
        d += x * vp;            // 追上时的距离
        if (d < c)
        {
            n++;  // 仍一件宝物
            d += (x + f) * vp;  // 可以再走x(恶龙返程时间)+f(停留时间)的距离
        }
    }
    printf("%d",n);
}

3.字符串替换问题

题目说明

已知字符串str,str表示邮箱的不标准格式。
其中”.”会被记录成”dot”,”@”记录成”at”。
写一个程序将str转化成可用的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)

代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>


// 把str中的sub_str替换为dest,开头和结尾不替换
char *strreplace(char *str, char *sub_str, char *dest, bool one)
{
    char *p = str;
    char *ptmp = (char *)malloc(strlen(str));
    if (NULL == ptmp)
    {
        printf("malloc fail\n");
        return NULL;
    }
    do
    {
        p = strstr(p,sub_str);
        if (p != NULL)
        {
            if (p != str && *(p+strlen(sub_str)) != '\0')  // 不是开头和结尾
            {
                // 替换
                strcpy(ptmp, p + strlen(sub_str));
                strcpy(p,dest);
                strcat(p,ptmp);
                p += strlen(dest);
                if (one)  // 只替换一个
                    break;
            }
            else
            {
               p += strlen(sub_str); // 跳过dot,找下一个 
            }
        }
    }while(p != NULL && *p != '\0');

    free(ptmp);
    return str;
}

int main()
{
    char str[1000+1] = {0};
    
    scanf("%s",str);
    printf("input:%s\n",str);
    strreplace(str,"at","@",true);
    strreplace(str,"dot",".",false);
    printf("%s",str);
    return 0;
}

寻找宝藏山

题目说明

一天,你去了一个神秘的森林,在那里你遇到了一个神秘的老人。他告诉你,森林里有一座宝藏山,但是要想到达宝藏山,你必须先通过一些森林的入口。

这个老人给你了一张地图,地图上有若干个入口和宝藏山,每个入口都有一个花费。你可以从任意一个入口开始,然后经过一些入口,最终到达宝藏山。但是你有一个限制,你只能走 K K K 步,如果走的步数超过了 K K K,那么你就无法到达宝藏山,也就无法获得宝藏。

你必须实现一个程序,接受用户输入的地图信息,并计算出,你能够到达宝藏山的最小花费。

分析

没看懂是什么意思

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值