1. n 层奇数三角形
这道题目考察我们通过嵌套循环输出对应图形,根据样例,我们可以将这个图形分成两部分:左侧由空格构成的三角形、右侧由数字和空格构成的数字三角形。
通过嵌套循环,外层循环实现行的变化,内层循环设置两个,第一个控制空格的输出,第二个控制数字的输出。
推广到 n 层奇数三角形:
第 i 行空格个数:n-i
第 i 行数字个数:i
第 i 行数字变化:1~2*i-1,每次加 2
2. 鸡兔同笼问题
这道题是在上题基础上的一个延伸,由判断一组数组变成了判断 a 组测试数据,那么我们只需要在刚才的基础上再套上一层循环,最外层循环循环 a次,表示对 a 组测试数据的逐一处理,每循环一次便输入一组测试数据,同时
进行枚举判断,如果有满足要求的解则直接输出,没有的话则输出 No answer。输出的时候不要忘了换行。
2. 同行同列的元素
对于本题,要求输出与 a[i][j]在同一行、同一列的所有元素,首先使用嵌套for 循环将所有数字存入数组中,接下来,遍历数组的第 i 行和第 j 列,这里因为只是单独的一行或者一列,所以只需要使用单层循环就可以。
3. 最高分数
这道题目的难度和综合性较前面的题目都有所提升,我们使用一个二维数组进行存放存放 n 名同学 m 门课的成绩。
接下来考虑计算并找出最高分数学生学号和总分的解决方式。因为我们是按行存放,那么一行就是一位同学 m 门课程的成绩。那么我们
可以使用累加器,累加每一行的成绩,判断一下是不是当前最高的,如果是的话就记录他的学号和成绩,因此我们可以设置两个变量 flag 和 max,使用 flag 记录学号,也就是行下标,使用 max 记录成绩。
题目要求 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(百分比的形式)为相同位置数组元素相同所占百分比。
冒 泡排 序是相邻两个数之间的比较排序,每轮 都从第一个数开始比起,依次往后比较相邻的两个数,每轮比较下来就能确定一个位置,从而实现排序的过程。
相邻两个数之间的冒泡排序用嵌套循环实现以 n 个数从小到大冒泡排序为例:
for(int i=0;ifor(int j=0;jif(a[j]>a[j+1]){
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
2.汽车排序
对于这道题目,要求我们实现 n 个汽车按重量从小到大的排序交换的次数。
首先我们需要把 n 个数保存到一维数组当中。N 不大于 10000,数组定义可以比 10000 大几个。题目要求相邻两个数进行交换排序,用冒泡排序对 n 个数进行从小到大的排序,若发生交换,用计数器记录交换的次数,最后将计数器里面的值输出。
2.选择、冒泡应用
1、小可的选择排序
对于这道题目,要求我们实现 M 个数据的从小到大排序。首先我们需要把M 个数保存到一维数组中之后再进行排序。M 在 100 以内,数组定义可以比100 大几个。for 循环输入 M 个元素后,接下来用选择排序对 M 个数进行从小到大的排序,最后把排好序的数组元素输出。
2、任命组长
对于这道题目,就是要求对一个无序的待排序列进行排序,排序后输出最小的两个数字就可以,因此我们可以直接对这 n 个数字进行从小到大的排序,这样排完序之后直接将前两个数字输出即可。
3、完美的数组
对于这道题目,比较难懂,首先分析题目,有 n 个数,那么每两个相邻的数就会产生一个差值,就是 n-1 个数,首先输入这 n 个数,然后计算出 n-1 个差值,根据题目要求我们需要取它们的绝对值,这时就需要用到 abs 函数。控制循环变量从 1 到 n-1,每次把 a[i]-a[a+1]的绝对值存入新数组,接下来,对存储数组里面的数字进行排序,因为按照题目要求,如果是完美数组,那这 n-1 个差值绝对值应该正好为 1~n-1 这几个数字,如果数组 1~n-1 所有位置正好就是 1~n-1,就输出‘Jolly ’,否则输出‘ Not Jolly’。
将一个字符数组的值赋值给另一个字符数组,其本质就是把含有'\0'结束符的字符串复制到另一个存储空间。
想要把字符串 b 的值赋给字符串 a,不能直接写赋值 a=b,我们可以利用strcpy(a,b)来给 a 赋值,strcpy(a,b)是把字符串 b 的值赋给字符串 a,要用头文件<cstring>。
这道题目描述比较长,需要仔细读题,大致过程就是,读入 n 组数据,每组数据包括一个账号、密码和邮箱,将这个邮箱与我的邮箱进行对比,如果相同,说明要修改密码,用循环遍历密码字符串,将大写改为小写,小写改为大写,修改完成后输出账号和密码,对于邮箱不相同的,不需要操作。关于'empty'的输出,可以使用 flag 标记,如果 n 次输入中,发现相同的邮箱,修改 flag 的值,最后对 flag 的值进行判断,如果等于其初值,说明没有发现需要修改的,直接输出'empty'。
3、字符排序
对于这道题目,因为是每行都是固定的 3 个字符,所以可以直接用 if 语句进行比较,首先声明、输入 n,执行 n 次循环输入字符串,存入一维字符数组,3 个字符互相比较 ASCII 码值,较小的放到数组 0 号下标,以此类推,排好顺序,输出排好顺序的字符串并换行。