本篇是练习题,相当于全是目前所学的内容的题目的练习,嗯,本专栏适合初学者,写完这个专栏后会把整个专栏再修改的更加严谨的
目录
10.1 神秘人洞府 - 散财之秘
Q10.1: 最外层的名字让你有点疑惑?散财,不过,等你看了规则之后已经明白了散财的意思:
只要说出一段下品灵石的数量,可以选择对应额度的上中下三种灵石,三种灵石加起来的价值和说出的下品灵石数量的价值一致。
三种灵石的换算:1上品灵石 = 100 中品灵石 = 10000下品灵石
如,输出14300下品灵石可以换出1枚上品灵石,43枚中品灵石。
输出23450下品灵石可以换出2枚上品灵石,34枚中品灵石,50枚下品灵石。
那么你该怎么做呢?
问题解决:散财得财
分析
按照这三者换算的规律:1上品灵石 = 100 中品灵石 = 10000下品灵石 。
这里我们需要对输入的灵石SpiritStones进行计算,上品灵石的数量SpiritStones_up 是SpiritStones / 10000,然后计算剩余灵石SpiritStones_remain的数量。
再用SpiritStones_remain / 100 算出中品灵石SpiritStones_middle的数量,再计算SpiritStones_remain,最终剩下的就是下品灵石的数量。
设计
变量设计
- 输入的下品灵石数量SpiritStones
- 上品灵石SpiritStones_up
- 中品灵石SpiritStones_middle
- (剩余的下品灵石SpiritStones_remain
算法设计
- 输入灵石数量
- 计算上品灵石
- 计算剩余灵石
- 计算中品灵石
- 计算剩余下品灵石数量
- 输出结果
编码
#include <stdio.h>
int main() {
int SpiritStones;
int SpiritStones_up = 0, SpiritStones_middle = 0;
int SpiritStones_remain = 0;
// 读取用户输入的下品灵石数量
scanf("%d", &SpiritStones);
// 计算上品灵石数量
SpiritStones_up = SpiritStones / 10000;
// 计算剩余下品灵石数量
SpiritStones_remain = SpiritStones % 10000;
// 计算中品灵石数量
SpiritStones_middle = SpiritStones_remain / 100;
// 计算最终剩余下品灵石数量
SpiritStones_remain = SpiritStones_remain % 100;
// 输出兑换结果
printf("你输入了%d下品灵石,兑换了%d上品灵石,%d中品灵石, %d下品灵石\n", SpiritStones, SpiritStones_up, SpiritStones_middle, SpiritStones_remain);
return 0;
}
测试运行
输入14200的结果:
输入320的结果:
10.2 神秘人洞府 - 石门密码
Q10.2: 解决了散财关卡的你兴致冲冲的来到了下一关。
中层的入口有个巨大的石门,石门上有一个密码锁,密码是一个 3 位整数。
石门上写着【密码满足以下条件:个位数字大于十位数字,十位数字大于百位数字,且三个数字之和为 15】。
你需要找出所有可能的密码组合来解开石门。
问题解决:破解密码
分析
从密码的条件我们可以知道 个位数字 > 十位数字 > 百位数字 且 三个数字之和为15。
很显然我们需要用到循环来遍历所有可能的三位数,并且拆分个、十、百位的数字,然后检查是否满足上面的条件,然后输出满足条件的三位数。
个位最大9,十位最大8,个位最大7。
设计
变量设计
- 密码password
- 个位units
- 十位tens
- 百位hundreds
算法设计
1. 初始化循环
- 外层:控制hundreds,从1开始(因为是3 位整数)到7结束
- 中层: 控制tens,从hundreds + 1(因为tens比hundreds大)开始,到8结束
- 内层: 控制units,从tens + 1 开始,到9结束
2. 条件判断
- 判断每组的units,tens,hundreds和是否为15
- 如果等于15就找到了符合条件的
3. 计算
- 对满足条件的进行计算得出password:hundreds * 100 + tens * 10 + units
- 用printf输出
4. 输出
- 当所有可能的组合都遍历完后,程序结束
编码
#include <stdio.h>
int main() {
int password;
for(int hundreds=1; hundreds<=7; hundreds++){
for(int tens = hundreds + 1; tens <= 8; tens++){
for(int units=tens + 1; units <= 9; units++){
if(hundreds + tens + units == 15){
password = hundreds * 100 + tens * 10 + units;
printf("%d\n", password);
}
}
}
}
return 0;
}
测试运行
10.3 神秘人洞府 - ?
待探