2. 鸡兔同笼问题
这道题是在上题基础上的一个延伸,由判断一组数组变成了判断 a 组测试数据,那么我们只需要在刚才的基础上再套上一层循环,最外层循环循环 a次,表示对 a 组测试数据的逐一处理,每循环一次便输入一组测试数据,同时
进行枚举判断,如果有满足要求的解则直接输出,没有的话则输出 No answer。输出的时候不要忘了换行。
2. 同行同列的元素
对于本题,要求输出与 a[i][j]在同一行、同一列的所有元素,首先使用嵌套for 循环将所有数字存入数组中,接下来,遍历数组的第 i 行和第 j 列,这里因为只是单独的一行或者一列,所以只需要使用单层循环就可以。
3. 最高分数
这道题目的难度和综合性较前面的题目都有所提升,我们使用一个二维数组进行存放存放 n 名同学 m 门课的成绩。
接下来考虑计算并找出最高分数学生学号和总分的解决方式。因为我们是按行存放,那么一行就是一位同学 m 门课程的成绩。那么我们
可以使用累加器,累加每一行的成绩,判断一下是不是当前最高的,如果是的话就记录他的学号和成绩,因此我们可以设置两个变量 flag 和 max,使用 flag 记录学号,也就是行下标,使用 max 记录成绩。
子主题 3
第三课:条件运算符与switch语句、嵌套循环、循环回顾
1.条件运算符
一般形式:表达式 1?表达式 2:表达式 3
执行过程:先计算表达式 1 的值,若为真(非 0)就执行表达式 2;若为假(0),执行表达式 3。
例:比较 a,b 两个数中较大的数
int max = a>b ? a : b;
当 a>b 时 max=a,否则 max=b
2. switch 语句
switch 语句是多分支语句,也叫开关语句
switch(表达式){
case 常量表达式 1
语句 1 break;
case 常量表达式 2
语句 2 break;
…….
case 常量表达式 n
语句 n break;
default:
语句 n+1;
}
题目要求 m 行 n 列的矩阵边缘元素和。首先考虑的是先定义二维数组保存m 行 n 列的矩阵元素,m 和 n 的范围为 100 内,定义数组 int a[105][105]。接下来嵌套循环输入填充数组元素,数组元素填充后遍历数组元素并判断数组元素的行列下标是否在最边缘,即行下标在第一行、最后一行、第一列或者最后一列,满足条件累加器累加数组元素。
3.比较相似性
题目要求将两张图像看成相同大小的黑白图像(用 0-1 矩阵来进行表示),求这两张图片的相似度。若两张图片在相同位置上的颜色相同,则称它们在该位置具有相同的像素点。两张图片的相似度定义为相同像素点数占总像素点数的百分比。首先需要定义两个二维数组 int a[105][105],b[105][105]代表两张相同
的图片,接下来输入 m 和 n 代表二维数组的行数和列数。两个嵌套 for 循环填充数组元素,填充数组元素后判断两个二维数组相同位置上的数组元素是否相同,若相同计数器计数相同位置元素相同的数量。最后计数器/总共位置 m*n(百分比的形式)为相同位置数组元素相同所占百分比。
两个矩阵的乘法仅当第一个矩阵 A 的列数和第二个矩阵 B 的行数相等时才能定义。如 A 是 m×n 矩阵,B 是 n×p 矩阵,它们的乘积 C 是一个 m×p 的矩阵。
矩阵 C 的任意一个元素值为:
Ci,j = ai,1b1,j + ai,2b2,j +···+ ai,nbn,j
第四课:嵌套循环练习、素数判定
1.嵌套循环练习
1. n 层奇数三角形
这道题目考察我们通过嵌套循环输出对应图形,根据样例,我们可以将这个图形分成两部分:左侧由空格构成的三角形、右侧由数字和空格构成的数字三角形。
通过嵌套循环,外层循环实现行的变化,内层循环设置两个,第一个控制空格的输出,第二个控制数字的输出。
推广到 n 层奇数三角形:
第 i 行空格个数:n-i
第 i 行数字个数:i
第 i 行数字变化:1~2*i-1,每次加 2