简单的小题集(六)


一、生命貮号长智力

期中考试快到了,面对一大堆课程要复习,总是让人焦头烂
额,有什么办法可以让你瞬间获取超能力呢? Du 老师最近发明了一种
补脑神药:生命 2 号口服液,吃了它可以让你脑袋以每秒 5000 转的速
度转动,记忆存储功能超常表现,理解能力线性增长。 现在摆在你面
前有很多生命 2 号排成一排,每个生命 2 号的 power 值不一样,现在你
要取一些生命 2 号神药服用,但是要求不能取任意两个相邻的生命 2 号,
请问怎么才能得到最多的能量值。在下图所示的 6 个小瓶中,我们取第
1 个、第 3 个和第 6 个瓶子时可以得到 1+4+8=13 的能量值。

#include <stdio.h>
int maxEnergy(int energy[], int n) {
 int dp[n]; // 存储最大能量值的数组
 dp[0] = energy[0]; // 初始化第一个瓶子的最大能量值
 // 递推计算最大能量值
 for (int i = 1; i < n; i++) {
 // 当前瓶子选中时的最大能量值
 int include = energy[i];
 // 前一个瓶子未选中时的最大能量值
 int exclude = dp[i - 1];
 // 当前瓶子与前一个瓶子相邻时,选择能量值较大的瓶子
 dp[i] = (include > exclude + energy[i - 1]) ? include : exclude + energy[i -
1];
 }
 return dp[n - 1]; // 返回最后一个瓶子的最大能量值
}
int main() {
 int energy[] = {1, 3, 4, 1, 8, 2}; // 每个瓶子的能量值
 int n = sizeof(energy) / sizeof(energy[0]); // 瓶子的数量
 int maxEnergyValue = maxEnergy(energy, n);
 printf("最大能量值为:%d\n", maxEnergyValue);
 return 0;
}

二、破译密码靠你啦!

最近手机频频被盗,引起了学校的高度重视。Du
老师给的建议是直接扔宿舍,这样既可以保证手机安全又可以安心上课
心无旁骛。但是很显然,这不太现实。学校发现,偷手机的人是团伙作
案,他们之间通过加密的英文信息进行通讯,这些加密的信息完全看不
懂,但是很幸运的是解密规则被你无意中发现。具体解密方法是这样:
(1) 每一个#替换为一个空格
(2) 把数字 1 换成 A,2 换成 B,3 换成 C… 26 换成 Z
(3)连字符(短横线)不必理会,仅仅是分割每一个字母
比如小偷的行动地点是学生食堂,那么明文和对应的密文如下所示。
明文:XUE SHENG SHI TANG
密文:26-21-5#19-8-5-14-7#19-8-9#29-1-14-7
现在学校截获了很多密文,要求计算机系的你帮助学校破译,如果破译
成功,将会记大功一件,并直接保送。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void decrypt(char* ciphertext) {
 int len = strlen(ciphertext);
 char* plaintext = (char*)malloc((len + 1) * sizeof(char)); // 动态分配内存存储解
密后的明文
 for (int i = 0; i < len; i++) {
 if (ciphertext[i] == '#') {
 plaintext[i] = ' ';
 } else if (ciphertext[i] == '-') {
 continue; // 跳过连字符
 } else {
 int shift = ciphertext[i] - '0';
 char decryptedChar = 'A' + shift - 1;
 plaintext[i] = decryptedChar;
 }
 }
 plaintext[len] = '\0'; // 添加字符串结束符
 printf("解密结果:%s\n", plaintext);
 free(plaintext); // 释放动态分配的内存
}
int main() {
 char ciphertext[1000];
 printf("请输入密文:");
 fgets(ciphertext, sizeof(ciphertext), stdin);
 // 移除换行符
 ciphertext[strcspn(ciphertext, "\n")] = '\0';
 decrypt(ciphertext);
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Magic171

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

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

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

打赏作者

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

抵扣说明:

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

余额充值