数据结构进阶实训一 位运算,优化算法
Data structure advanced training course notes and algorithm exercises 数据结构进阶实训课程笔记和算法练习
Source Code: https://github.com/MysticalGuest/DataStructure/tree/master/AdvancedJuniorTraining
题目1
1 | 对于一个字节(8bit)的无符号整型变量 |
1.1 算法设计思想
用户直接输入一个8位无符号整型常数,并进行用户输入的校验,如果不满足条件,提示用户重新输入,直到输入正确;
将十进制转换为二进制;
持续下面循环8次:
将二进制数模2,结果为1,计数器加1,然后二进制数右移一位;
循环结束,1的个数为计数器值。
1.2 源代码
1 |
|
1.3 运行情况截图
题目2
1 | 给定一个整数N,N!末尾会有多少个0呢?编写算法计算给定的N!末尾有多少个0? |
2.1 算法设计思想
一个数的阶乘末尾有多少0,即判断这个数除以10的余数是否为0,如果为0,则末尾是0。
2.2 源代码
1 | while(factorial>0){ |
2.3 运行情况截图
题目3
1 | 求N!的二进制表示中最低位的1的位置。 |
3.1 算法设计思想
初始化计数器为0;
先把n!化为二进制表示的形式,再把其二进制形式模2,如果结果为0,将其二进制形式右移一位,并且计数器加1;
循环上面的操作,直到模2结果为1,结束循环,计数器即为最后结果。
3.2 源代码
1 | int convert(int x){ // 十进制转二进制 |
3.3 运行情况截图
题目4
1 | 对于一个由N个整数组成的数组,设计算法(程序),求出该数组中的最大值和最小值。 |
4.1 算法设计思想
先判断数组的前两个值,将小的赋给min,将大的赋给max;
循环从数组的下标2开始,将数组下标为2的值记为num,如果num小于min,则将num赋值给min,反之则不变;
如果num大于max,则将num赋值给max,反之则不变;
直到循环结束,max则为最大值,min为最小值。
4.2 源代码
1 | void main(){ |
4.3 运行情况截图
题目5
1 | 快速找出一个数组中所有满足条件的的两个数。(条件:这两个数的和等于一个给定的值sum.)。 |
5.1 算法设计思想
从第1个数开始循环与后面的数相加,判断结果如果等于给定值sum就输出这两个值;
然后从第2个数开始循环与后面的数相加,以此循环直到把数组遍历完。
5.2 源代码
1 | void main(){ |
5.3 运行情况截图