一、专业基础模块
1.试题编号:J1-1《小学生数学辅助学习系统》关键算法
(1)任务描述
随着社会的发展及人们对小学阶段的教育重视程度在不断提高,A 公司决定开发 一套小学生数学辅助学习系统,通过完成趣味试题,采用游戏通关的方式,帮助小学 生掌握数学里的基本概念和计算方法。
任务一:实现趣味试题 1 的关键算法(30 分)
通过键盘输入某年某月某日,计算并输出这一天是这一年的第几天。例如,2001 年 3 月 5 日是这一年的第 64 天。
注意:使用分支结构语句实现。
static void J1_1_1(int year,int month,int day) {
int sum = 0;//总天数
month--;
while (month != 0) {
int k = 0;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
k = 31;
break;
case 2:
//判断闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
k = 29;
}
else {
k = 28;
}
break;
case 4:
case 6:
case 9:
case 11:
k = 30;
break;
default:
break;
}
sum += k;
month--;
}
Console.WriteLine($"{year} 年 {month} 月 {day} 日是这一年的第 {sum+day} 天。");
}
任务二:实现乘法口诀助记功能的关键算法(30 分)
选择乘法口诀助记功能,输出阶梯形式的 9*9 乘法口诀表,如下所示。
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
注意:使用循环结构语句实现
static void J1_1_2() {
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
Console.Write($"{j}*{i}={i*j}\t");
}
Console.WriteLine();
}
}
任务三:实现趣味试题 2 关键算法(30 分) 判断一个整数是否为“水仙花数”。所谓“水仙花数”是指一个三位的整数,其各位数字立方和等于该数本身。例如:153 是一个“水仙花数”,因为 153=1^3+5^3 +3^3。
注意:用带有一个输入参数的函数(或方法)实现,返回值类型为布尔类型
static bool J1_1_3(int num) {
int k = num;
int sum = 0;
while (k != 0) {
int a = k % 10;
sum += a * a * a;
k /= 10;
}
return sum == num;
}
(2)作品提交要求见本模块附录 1
(3)实施条件要求见本模块附录 2
(4)评价标准见本模块附录 3
2.试题编号:J1-2《图形面积计算系统》关键算法
(1)任务描述 图形在我们的生活中无处不在,看看我们的周围,到处都是图形的缩影、例如空 调是长方形、水瓶瓶盖是圆形,这些图形的计算对于我们的土木工程师来说,那可是 非常重要的啊,所以某公司开发出一套图形面积计算系统,帮助那些工程师们更好的 计算。
任务一:实现计算体积关键算法(30 分) 根据输入的半径值,计算球的体积。输入数据有多组,每组占一行,每行包括一 个实数, 表示球的半径。输出对应球的体积,对于每组输入数据,输出一行,计算结 保留三位小数。 注:PI = 3.1415927 例如:输入 2 输出 33.510 注意:使用公式完 成。 注意:使用带参数的方法完成。
static void J1_2_1(int r) {
double PI = 3.1415927;
double res = PI * 4.0 * r * r * r / 3.0;
Console.WriteLine(Math.Round(res, 3).ToString());//四舍五入保留小数
}
任务二:实现坐标求长度关键算法(30 分) 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。输入数据有多组, 每组 占一行,由 4 个实数组成,分别表示 x1,y1,x2,y2,数据之间用空格隔开。
例如
输入: 1 3 4 6 则输出:4.24
注意:结果保留两位小数。
static void J1_2_2() {
double x1 = 1;
double y1 = 3;
double x2 = 4;
double y2 = 6;
double res = Math.Sqrt(Math.Pow(x1-x2,2)+ Math.Pow(y1 - y2, 2));
Console.WriteLine(Math.Round(res, 2).ToString());//四舍五入保留小数
}
任务三:实现图形面积大小比较关键算法(30 分) 按顺序输入正方形的边长(a),长方形的长(l)和宽(d),以及圆的半径(r), 计 算并比较它们哪个图形面积更大,输出面积最大的图形。
例如:
输入 1 3 4 1,输出:长方形
static void J1_2_3() {
int a = 1;
int l = 3;
int d = 4;
int r = 1;
double n1 = a * a;//正方形
double n2 = l * d;//长方形
double n3 = Math.PI * r * r;//圆
if (n1 < n2 && n2 < n3)
{
Console.WriteLine("圆");
}
else if (n2 < n1 && n1 < n3)
{
Console.WriteLine("正方形");
}
else {
Console.WriteLine("长方形");
}
}
(2)作品提交要求见本模块附录 1
(3)实施条件要求见本模块附录 2
(4)评价标准见本模块附录 3
3.试题编号:J1-3《网络选拔赛题库系统》关键算法
(1)任务描述 随着网络的普及,许多比赛开始采用网络选拔赛的模式。某大赛组委会决定开发 一个网 络选拔赛题库系统,实现该系统需要完成以下任务。
任务一:实现统计元音关键算法(30 分)
输入一个字符串统计每个元音字母(aeiou)在字符串中出现的次数。 对于结果输出5 行,格式如下:
a:num1(a 的个数)
e:num2(b 的个数)
i:num3(i 的个数)
o:num4(o 的个数)
u:num5(u 的个数)
例如:输入 aeioubbbccc,输出:
a:1
e:1
i:1
o:1
u:1
注意:使用分支语句实现。
static void J1_3_1(string s) {
//注意:使用分支语句实现。
int[] nums = new int[5];
for(int i = 0; i < s.Length; i++)
{
char ch = s[i];
switch (ch) {
case 'a':
nums[0]++;
break;
case 'e':
nums[1]++;
break;
case 'i':
nums[2]++;
break;
case 'o':
nums[3]++;
break;
case 'u':
nums[4]++;
break;
default:
break;
}
}
Console.WriteLine($" a:{nums[0]}\n e:{nums[1]}\n i:{nums[2]}\n o:{nums[3]}\n u:{nums[4]}");
}
任务二:实现 Switch Game 关键算法(30 分)
有 n 盏灯,编号 1~n(0<n<100)。第 1 个人把所有灯打开,第 2 个人按下 所有编号为 2 的倍数的开关(这些灯将被关掉),第 3 个人按下所有编号为 3 的 倍数的开关(其中关掉 的灯将被打开,开着的灯将被关闭),依次类推。输入灯数和 人数,输出开着的灯的编号。
比如输入:10 2
输出最后亮灯的编号:1,3,5,7,9
注意:使用循环语句实现。
static void J1_3_2() {
int m = 10;
int n = 2;
int[] a = new int[m];
//0开,1关
for (int i = 2; i <= n; i++) {
for (int j = 1; j < m; j++) {
if (j % i == 0) {
if (a[j] == 0)
{
a[j] = 1;
}
else {
a[j] = 0;
}
}
}
}
for (int j = 1; j < m-1; j++)
{
if(a[j]==0) Console.Write(j + ",");
}
Console.WriteLine(a[m-1]==0?m-1+"":"");
}
任务三:实现 2^x mod n = 1 关键算法(30 分) 给你一个数字 n,找到满足 2^x mod n = 1 的最小值 x,如果 x 存在,则输出 “2 ^x mod n = 1”,否则输出“2 ^? mod n = 1”,您需要用真实的 x 和 n 的值来 替代字符串中的变量。 例如输入 5,输出答案为 2^4 mod 5 = 1。
static void J1_3_3() {
//思路 一 费马小定理的运用:
//n为偶数时 不会存在x 使得 2 的 x次方 对n取余为1;
//n为1时也不会存在;
//n为非1奇数时,则gcd(n, 2) == 1,故必存在一值x使得 2 的 x次方 对n取余为1。
//思路 二
// 用到数论上的乘法逆元的规律了。
//乘法逆元:对于整数a、p如果存在整数b,满足a* b mod p = 1,则称
// b是a的模p的乘法逆元。a存在模p的乘法逆元的充要条件是gcd(a, p) = 1
//此题中,令a = 2 ^ x,b = 1,p = n,则若存在x使得2 ^ x mod N = 1,
//则gcd(2 ^ x, N) = 1。
//1 >.因为N > 0,当N为偶数时,gcd(2 ^ x, N) = 2 * k(k = 1, 2, 3……),不满足
//2 >.当N为奇数时,gcd(2 ^ x, N) = 1满足条件。
//3 >.当N为1时,2 ^ x mod N = 0,不符合条件
// 所以N为奇数,且不为1,满足2 ^ x mod N = 1,暴力求解。
int n = 6;
//int n = 5;
if (n % 2 == 1 && n > 1)
{
for (int x = 1;; x++)
{
if ((1 << x) % n == 1)
{
Console.WriteLine($"2^{x} mod {n} = 1");
return;
}
}
}
else
{
Console.WriteLine($"2^? mod {n} = 1");
}
}
(2)作品提交要求见本模块附录 1
(3)实施条件要求见本模块附录 2
(4)评价标准见本模块附录 3
4.试题编号:J1-4《儿童智力游戏》关键算法
(1)任务描述 A 公司是专门的儿童网络游戏公司,现在公司正在开发几款智力游戏,其中需要 设计几个算法模型。
任务一:实现堆积木游戏功能关键算法(30 分)
堆积木是小孩子最爱玩的游戏,但是因为小孩子的好奇心(比如误食积木等)导 致家长们越不愿意让孩子去玩积木,为了解决这个问题 TX 公司开发了一套 VR 积木 游戏,你要做的是将用户堆好的积木在屏幕中显示出来。
*******
*****
***
*
注意:使用循环结构语句实现。
static void J1_4_1() {
for (int i = 7; i > 0; i -= 2) {
for (int j = 0; j < i; j++) {
Console.Write("*");
}
Console.WriteLine();
}
}
任务二:实现抓娃娃游戏功能关键算法(30 分)
请你在娃娃机里放十个娃娃,每个娃娃对应一个数字,该数字表示娃娃的大小。 要求通过计算能输出最大的娃娃对应的数字,你可以这样做:
① 定义一个大小为 10 的整型数组 a;
② 从键盘输入 10 个整数,放置到数组 a 中;
③ 输出数组 a 中的最大值。
注意:使用数组、循环结构语句实现。
static void J1_4_2() {
int[] a = new int[10];
int max = int.MinValue;
for (int i = 0; i < 10; i++) {
a[i] = int.Parse(Console.ReadLine());
if (max < a[i]) {
max = a[i];
}
}
Console.WriteLine(max);
}
任务三:实现算数游戏功能关键算法(30 分)
游戏主要是这样的,计算正整数 n 每个数位上的数之积,例如 24,它的每个数 位上的数字之积为 2 * 4 = 8,现在要求你为 A 公司编写一个计算函数(或方法)fun, 将结果放到 c 中,并显示输出。作为参考答案。
static void J1_4_3() {
int n=24;
int c = 1;
while (n != 0) {
c *= n % 10;
n /=10;
}
Console.WriteLine(c);
}
(2)作品提交要求见本模块附录 1
(3)实施条件要求见本模块附录 2
(4)评价标准见本模块附录 3
5.试题编号:J1-5《幼师培训系统》关键算法
(1)任务描述
幼儿教师是教师队伍中不可忽略的重要力量。她们主要以女性教育者为主,负责 教育学龄前儿童也就是幼儿。幼儿教师主要对幼儿进行启蒙教育帮助他们获得有益的 学习经验,促进其身心全面和谐发展。幼儿教师在教育过程中的角色决不仅仅是知识 的传递者,而且是幼儿学习活动的支持者、合作者、引导者。本系统用于培训幼师们 与小朋友之间的游戏交互能力,在游戏中可以帮助小朋友们的成长。为实现该系统, 需要完成以下任务。
任务一:实现整除判断游戏功能关键算法(30 分)
整除判断游戏能显著提高小朋友的逻辑思维能力,问题要求如下:
• 能同时被 3、5、7 整除
• 能同时被 3、5 整除
• 能同时被 3、7 整除
• 能同时被 5、7 整除
• 只能被 3、5、7 中的一个整除
• 不能被 3、5、7 任一个整除 输入一个整数,输出满足对应条件的结果。
要求:使用分支结构语句实现。
static void J1_5_1() {
int n = 10;
int k = 0;
if (n % 3 == 0) k+=3;
if (n % 5 == 0) k+=5;
if (n % 7 == 0) k+=7;
switch (k) {
case 15:
Console.WriteLine("能同时被 3、5、7 整除 ");
break;
case 12:
Console.WriteLine("能同时被 5、7 整除 ");
break;
case 10:
Console.WriteLine("能同时被 3、7 整除 ");
break;
case 8:
Console.WriteLine("能同时被 3、5 整除 ");
break;
case 7:
Console.WriteLine("能被7整除 ");
break;
case 5:
Console.WriteLine("能被5整除 ");
break;
case 3:
Console.WriteLine("能被3 整除 ");
break;
case 0:
Console.WriteLine("不能被 3、5、7 整除 ");
break;
default:
break;
}
}
任务二:实现冒泡游戏功能关键算法(30 分)
原始数组:a[]={1,9,3,7,4,2,5,0,6,8}
排序后: a[]={0,1,2,3,4,5,6,7,8,9}
输出排序后的数组,每个数字之间空一个空格;
要求:综合使用分支、循环结构语句实现,直接输出结果不计分。
static void J1_5_2() {
int[] a = {
1, 9, 3, 7, 4, 2, 5, 0, 6, 8 };
for (int i = 0; i < a.Length-1; i++) {
for (int j = 0; j < a.Length - i - 1; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (int i = 0; i < a.Length; i++) {
Console.Write(a[i]+" ");
}
}
任务三:实现数一数游戏关键算法(30 分)
分别输入两个字符串 s1 和 s2 ,请问 s1 中包含多少个 s2,如果没有则输出 0。
要求:使用循环。
static void J1_5_3() {
int cnt = 0;
string s1 = "abcabcbacbacbab";//3
string s2 = "ab";
for (int i = 0; i <= s1.Length - s2.Length; i++) {
if (s1.Substring(i, s2.Length).Equals(s2)) {
cnt++;
i+=2;
}
}
Console.WriteLine(cnt);
//正则
Console.WriteLine(Regex.Matches(s1,s2).Count);
}
(2)作品提交要求见本模