BC97 回文对称数
这道题目的难点在于一个未知位数的数,要得到他的回文数该怎么做。如果只是把回文数打印当做字符打印出来可以每次除余后输出就行(注意0不能比正数先出现)。但这道题目是要去比较回文数和原来的数是否一样,就不能只得到字符回文了,要得到数字。按自己最初想法,先得到数的位数,然后依据位数可以对除余下来的每一位数乘以10对应的幂,但这样太麻烦了。注意到一个数,回文也就是最大位和最小位中间位数互换,原数字每余下来一个,目标数字就多一个。依据这个可以写一个循环直接得到目标数字
for (i = 1; i <= n; i++)
{
int temp = i;//i是原数字
int sum = 0;//sum是目标数字
while (temp)
{
sum *= 10;//先*10防止多*了一个10
sum += temp % 10;
temp /= 10;
}
BC130 最高身高
这道题目技巧点在于存储数据避免多次循环判断。只需要找到最大的数据,所以输入一个数据就可以判断大小,然后把大的数据坐标储存下来,这样就可以直接得到坐标,不用多次循环判断。
BC131 矩形判断相等
这道题目学到了一个知识点,int main函数里return 0是结束的标志,代码中可以有多个return 0,像这个题目,当输入第二个矩形时如果判断到不相等可以直接return 0走就行了,就不会往下运行相等的情况了
BC142 扫雷
学到了一个方法,二维数组中知道一个位置,怎么遍历他四周的值,可以用双循环的方法。
BC110 x型图案
这道题目和传统输出图形题目有点不一样,如果按老方法先输出空格再输出*会很复杂,所以就要寻找其他方法,依据题意可以找到其他规律,按规律输出即可。
BC133 回形矩阵
一个挺难的题目,还是要找到图形的规律,用二维数组来做,完成赋值再输出即可,然后难点就在于怎么赋值到二维数组,观察到总共要赋值n*n次,可以以此作为循环条件,赋完值就结束。然后可以以一圈为基准,写出最外圈的赋值历程,然后通过变化变量的值就可以赋内圈的值。
BC156 数组匹配
难点在于求连续子序列的和,怎么把所有连续的子序列遍历出来。这里采用固定起始和终止点然后遍历中间值的方法,而不是按1个数的序列,2个数的序列3个,4个.....因为这样固定的值多,变化的少,就可以用循环等一些方法简单的遍历出来子序列,然后判断差值存储起始和终止位置就行了。
BC161 大吉大利 今晚吃鸡
汉诺塔问题,用函数递归就可以解决,这题目要注意不能移动多下,只能一个一个移动,所以递归函数应该是先把n-移动到c在把最后一个移动到b在把n-个移动到a最后把最后一个移动到c。要注意的是最后别忘了还要把n-1个移动到c,完成循环嵌套函数。