课程
计算思维与创新习题
计算思维与创新习题
- 姓名:八奈见杏菜
- 学号:1234567890
- 班级:23-x班
- 组名:真得去看超时空辉夜姬
第一题
题目描述
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以3人一排、五人一排、七人一排的变换队形,而他每次只需扫一眼队伍的排尾就可知道总人数。一次,韩信带1500名士兵打仗,战死四五百人,剩余士兵战3人一排,多出2人;5人一排,多4人;7人一排,多6人,韩信很快说出人数。设计算法计算剩余士兵数。
解题思路或设计方案
要解决这个问题,我们可以采用逐步逼近的方法来确定剩余士兵的人数。首先,我们知道韩信带了1500名士兵,并且知道了剩余士兵战3人一排多出2人,战5人一排多出4人,战7人一排多出6人。这些信息可以用以下方程表示:
- 剩余士兵 mod 3 = 2
- 剩余士兵 mod 5 = 4
- 剩余士兵 mod 7 = 6 我们可以使用中国剩余定理来解决这个问题,找到满足上述条件的最小正整数。接下来,我们可以逐步增加7 * 5 * 3 = 105 的倍数,直到找到满足所有条件的解。
实现
`cpp
#include
int findRemainingSoldiers() { for (int x = 1; ; x++) { if (x % 3 == 2 && x % 5 == 4 && x % 7 == 6) { return x; } } }
int main() { int remainingSoldiers = findRemainingSoldiers(); std::cout << “剩余士兵的人数为:” << remainingSoldiers << std::endl; return 0; } `
第二题
题目描述
公元2600年1月1日,发生了世界经济大恐慌,从当天开始物价飞涨,假设第一天一个面包要1元,第2天要3元,第3天要6元,第4天要10元,请估算一家人若一天消耗4个面包,一年的面包开支需要多少钱。
解题思路或设计方案
要解决这个问题,我们可以观察到每一天的面包价格都是前一天的价格加上一个自然数(1,2,3,4…),这是一个等差数列。我们可以通过计算前N天的总价格来估算一年的面包开支。
- 第1天:1元
- 第2天:1 + 2 = 3元
- 第3天:3 + 3 = 6元
- 第4天:6 + 4 = 10元 …
我们可以使用以下公式来计算前N天的总价格:
- 总价格 = 1 + 2 + 3 + … + N = N * (N + 1) / 2 然后,我们将总价格乘以365,即一年的天数,再乘以每天消耗的面包数量(4个面包),就可以得到一年的面包开支。
实现
`cpp
#include
int calculateYearlyExpense() { int daysInYear = 365; int breadPerDay = 4; int totalExpense = 0;
for (int day = 1; day <= daysInYear; day++) {
totalExpense += day * breadPerDay;
}
return totalExpense;
}
int main() { int yearlyExpense = calculateYearlyExpense(); std::cout << “一年的面包开支需要:” << yearlyExpense << “元” << std::endl; return 0; } `
第三题
题目描述
一场球赛开始前,售票工作正在紧张进行。每张球票50元,现有30人排队等待购票,其中20人手持50元的钞票,另外10人手持100元的钞票。
假设开始售票时售票处没有零钱,求当这30人排队购票时,使售票处不至于出现找不开钱的局面时的不同排队种数。(约定排队只认钞票不认人,即:拿同一种面值钞票的人对换位置为同一种排队。)
解题思路或设计方案
要解决这个问题,我们需要找出排队购票时的不同排队种数,以确保售票处不会出现找不开钱的局面。我们可以使用递归方法来解决这个问题。
首先,考虑排队中的第一个人,他可以选择购买50元的球票或者100元的球票。如果他购买50元的球票,剩下的29人排队的问题就转化为了一个子问题,即有20人手持50元钞票和10人手持100元钞票的情况下的不同排队种数。如果他购买100元的球票,那么剩下的29人排队的问题就转化为了一个子问题,即有21人手持50元钞票和9人手持100元钞票的情况下的不同排队种数。
然后,我们可以递归地计算出这两个子问题的不同排队种数,并将它们相加,就得到了原始问题的不同排队种数。递归的结束条件是排队中没有人或者售票处无法找开零钱。
实现
`cpp
#include
// 计算不同排队种数的递归函数 int countQueueVariations(int numPeopleWith50, int numPeopleWith100) { // 如果排队中没有人了,返回1表示一种有效排队方式 if (numPeopleWith50 == 0 && numPeopleWith100 == 0) { return 1; }
int variations = 0;
// 尝试购买50元的球票
if (numPeopleWith50 > 0) {
variations += countQueueVariations(numPeopleWith50 - 1, numPeopleWith100);
}
// 尝试购买100元的球票
if (numPeopleWith50 >= 2 && numPeopleWith100 > 0) {
variations += countQueueVariations(numPeopleWith50 - 2, numPeopleWith100 - 1);
}
return variations;
}
int main() { int numQueueVariations = countQueueVariations(20, 10); std::cout << “不同排队种数:” << numQueueVariations << ” 种” << std::endl; return 0; } `
第四题
题目描述
假设每匹马都有恒定且不同的速度,所以速度快的马一定比速度慢的马先到终点。最后,谁赢的场数多于一半(不包括一半),谁就是赢家。渊子有n匹马参加比赛,对手的马的数量与渊子的马的数量一样,并且知道马的速度,请设计算法以预测渊子是否能赢得比赛。按照以上的模板
解题思路或设计方案
要解决这个问题,我们可以采用以下的思路:
将渊子拥有的马按速度从快到慢排序。
将对手的马按速度从快到慢排序。
逐一比较渊子的马和对手的马的速度,记录渊子获胜的场次。
如果渊子获胜的场次多于一半,那么渊子就是赢家,否则,渊子不是赢家。
这个算法的关键是将马按速度排序,然后比较它们的速度,记录获胜场次。这可以确保渊子赢得比赛的条件。
实现
`cpp
#include
bool canWinRace(std::vector
// 对渊子的马按速度排序
std::sort(yuanshiziHorses.begin(), yuanshiziHorses.end());
// 对对手的马按速度排序
std::sort(opponentHorses.begin(), opponentHorses.end());
// 逐一比较速度
for (int i = 0; i < n; i++) {
if (yuanshiziHorses[i] > opponentHorses[i]) {
wins++;
}
}
// 判断是否赢得比赛
return wins > n / 2;
}
int main() {
std::vector
if (canWinRace(yuanshiziHorses, opponentHorses)) {
std::cout << "渊子可以赢得比赛" << std::endl;
} else {
std::cout << "渊子不能赢得比赛" << std::endl;
}
return 0;
} `
第五题(第二题1)
题目描述
有时以小组为单位评定成绩,但其中可能有经常打“酱油”的,甚至不学的,应该如何促进他们积极学习?小组内如何分配成绩才能公平且大家能开心、服气地接受?
解题思路或设计方案
要解决小组内有成员不积极学习的问题,并确保成绩分配公平且让大家满意,可以考虑以下几个方面的策略:
- 激发兴趣和积极性:首先,尝试激发每个小组成员对学习的兴趣和积极性。这可以通过举办有趣的学习活动、提供鼓励和奖励、设立学习目标等方式来实现。
- 明确小组目标:确保小组有明确的学习目标,让每个成员都知道他们正在努力实现什么目标。这有助于提高每个人的责任感和动力。
- 分工合作:鼓励小组成员进行分工合作,使每个人都能发挥自己的特长,共同完成任务。这可以激励那些可能不擅长某些方面的成员更加积极参与。
- 透明的评估标准:确保成绩评估标准是透明的,每个人都明白如何获得好成绩。这可以减少争议和不满。
- 反馈和改进:定期提供反馈,帮助每个成员了解他们的表现,并提供改进建议。鼓励他们根据反馈不断提高。
- 公平的成绩分配:对于成绩分配,可以考虑采用多元化的方法,包括个人贡献、团队合作、课堂参与等因素。确保成绩分配不仅仅基于考试成绩,也考虑到其他方面的表现。
实现
实际的实施方式可能因情况而异,但以上提到的策略可以作为一个基础。可以通过小组讨论、教师的引导和监督、设立奖励制度等方式来落实这些策略,从而促进小组成员的积极学习,并确保公平和满意的成绩分配。重要的是,要建立一个良好的学习氛围,鼓励每个人都全身心地参与学习。
第六题(第二题2)
题目描述
假设有n个宿舍楼,每个宿舍楼有m个房间,每个房间可住k个人,有j个学院的学生需要住宿,每个学院的学生数为s,你能给出几种方案管理宿舍呢?如何管理才能提高宿舍的利用率?(或者教室自习座位管理及利用)
解题思路或设计方案
-
随机分配:最简单的方式是随机分配宿舍或座位。这种方法不需要太多的管理,但可能导致不均匀的利用和资源浪费。
-
学院分配:将每个学院的学生分配到同一宿舍楼或教室区域。这种方法可以促进学院之间的社交和合作,并减少学生的通勤时间。
-
自愿选择:让学生自愿选择宿舍或座位,但在选择时限制一定的规则,如同一学院的学生优先选择,或者避免单人房间的浪费。
-
动态调整:定期检查宿舍或座位的利用情况,并根据需要进行动态调整。例如,将空房间分配给需要的学院,或者将少人使用的座位转移到高需求区域。
-
智能分配系统:利用技术和算法来优化宿舍或座位的分配。可以使用数据分析来预测需求,并根据学生的个人偏好和时间表来分配。
-
时间共享:允许不同学院或班级在不同时间共享相同的宿舍或教室。这可以最大程度地利用资源,但需要有效的时间表和管理。 为提高宿舍或教室的利用率,可以考虑以下方法:
-
合理规划布局:确保宿舍或教室的布局合理,最大化空间利用率。
-
设立预约系统:为学生提供预约宿舍或座位的机会,以确保有足够的空间供给。
-
定期维护:保持宿舍或教室的设施和设备良好状态,以鼓励学生使用。
-
提供灵活选择:允许学生根据个人偏好选择宿舍或座位,例如选择安静的地方或者与同学一起。
-
鼓励共享:鼓励学生共享资源,例如在宿舍里共享物品,或者在教室里组织小组学习。 不同的管理方案和提高利用率的方法可以根据具体情况和需求来选择和实施。最重要的是要根据学生的需求和反馈来调整管理策略,以确保满足他们的期望和需求。
第七题(第二题3)
题目描述
学习或生活中你是否遇到过一些不便利或一些繁琐、重复的任务?你是否有兴趣构造一个软(硬)件系统,以解决这些不便?写出你的方案。
解题思路或设计方案
- 问题定义:首先,明确定义问题是什么以及需要解决的任务是什么。确保问题的范围和目标清晰明确。
- 需求分析:了解用户的需求和期望,以便设计一个满足他们需求的系统。这包括收集用户反馈和建议。
- 系统设计:根据问题和需求,设计一个合适的系统架构和功能。这包括确定所需的技术和工具。
- 开发和测试:实施系统的开发,并进行测试和调试,确保系统能够正常运行并满足要求。
- 用户反馈和改进:在系统投入使用后,持续收集用户反馈,并根据需要进行改进和优化。
- 维护和支持:持续维护和支持系统,确保它的稳定性和可用性。
实现
曾经遇到过需要批处理的文件夹命名,便用powershell写了点代码进行批处理













