优快云周赛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,那么你就无法到达宝藏山,也就无法获得宝藏。
你必须实现一个程序,接受用户输入的地图信息,并计算出,你能够到达宝藏山的最小花费。
分析
没看懂是什么意思