本人之前主要用到的都是python,但是由于懒得要死lc一道题都没做过导致笔试被乱杀,所以过来强制让自己学点东西,如有任何问题请指出,不吝赐教!
Day 2 第三讲 循环 了解循环 语法规则for 语句的一般形式为:
for (循环初始化表达式; 循环条件表达式; 循环执行表达式){ 循环体 }
简单应用运行过成为
- 执行 循环初始化表达式
- 执行循环条件表达式,若为真,则执行循环体,否则结束循环
- 执行完循环体后再执行循环执行表达式
- 重复2,3,直到循环条件表达式的值为假
使用c++实现一个简单的1+2+3+…+n的循环
int sumNums(int n){ // 1 int i; // 2 int sum = 0; // 3 for(i = 1; i <= n; ++i){ // 4 sum += i; // 5 } return sum; // 6 }
- 输入函数,输入值为n,函数名称为sumNums
- i作为循环变量
- 初始化求和值为0,sum = 0
- for 循环(循环初始表达式: i = 1
循环条件表达式: i <= n
循环执行表达式:++i ) - 循环体: sum += i,代表每次累加第i次的值到sum中
- 返回求和sum的值
以下基于之前的等差数列求和代码进行改动
初始化表达式外置将初始化表达式提到for循环外面
int i = 1; // 在这一步直接将i初始化为1 int sum = 0; for ( ; i <= n ; ++i) { sum += i; }初始化表达式内置
在初始化表达式内 进行 初始化赋值,通过逗号分割
int i, sum; for (i = 1, sum = 0; i <= n; ++i){ sum += i; }条件表达式
若不告诉代码判断语句当 i <= n 的时候进行循环,则会无限的累加下去
int i = 1, sum = 0; for (i = 1; ; ++i){ // 这里缺失了判断语句,所以会无限循环 sum += 1; }执行表达式
执行表达式 作用是让循环条件逐渐不成立,从而达到跳出循环的目的。
例如在上述代码中,我们的目标是等差数列的和,当累加到n的时候,这个总值已经是我们需要的值了,所以不需要再往下加。
但是执行表达式可以被省略,进行外置,因为本身for循环就是个循环体,在条件中循环也是循环,在外面循环也是循环(但是这两种循环方式可能会让i值不同,但是判断语句i<=n不会出错),如下所示
int i, sum = 0; for (i = 1; i <= n; ){ // 将执行表达式外置 sum += i; ++i; // 放在这里照样进行循环 }题目分析 2的幂
实现一个函数,判断一个32位整形n是否为2的幂
幂:几的几次方,能被整除
bool isPowerTwo(int n){ int i; unsigned int k = 1; // 1 if ( n < = 0 ) { return false; // 2 } if ( n == 1 ) { return true; // 3 } for ( i = 1, i < = 31; ++i ) { k *= 2; // 4 if ( k == n ) { return true; // 5 } } return false }
- 定义一个无符号整型 k
- 如果 n <= 0, 则必然不是2的幂
- 必然是 2的0次幂
- 枚举所有的可能,直至31(2^1 ,22,…231)
- 如果找到了与n相同的值,返回true
- 否则返回false
给定两个正整数n,k
如果正整数i满足 n % i == 0,则称i是整数k的因子
考虑整数n所有因子,升序排列,并返回第k个因子
如果n的因子数量少于k,返回-1
int Factor(int n, int k){ int i = 1 int count = 0; // 1 for(; i <= n; ++i){ // 2 if (n % i == 0) { // 3 ++ count; if (count == k){ return i; // 4 } } } return -1; // 5 }
- 定义count计数器并初始化为0
- 枚举所有[1,n]范围内所有数字为因子数
- 一旦满足 n % i == 0, 则计数器+1
- 当计数器等于k时代表找到了第k个因子,直接返回
- 如果没找到第k个因子,代表因子数量不够,所以返回-1
给定正整数x,如果x是完全平方数,返回true,否则false
int isSquare( int x ){ int i; long long p; for( i = 1; ;++i ){ // 1 p = (long long)i * i; // 2 if ( p == x ) { return true; // 3 } if ( p > x ) { return false; // 4 } } return false; // 5 }
- 定义无限循环(没有循环条件表达式)
- 枚举所有数平方,通过 long long 避免32整型溢出
- 如果发现某个数的平方等于x,返回true
- 如果发现p值大于x,无需继续,返回false
- 保护该代码能够跳出
本次课程中第一个正攻解决的题目。相较于之前的示例代码,尝试了将初始化提出for循环,在最开始的时候进行初始化,个人观感程度获得了一定提升。
2 3 4 的幂需要注意的只是会不会溢出。本题拿python写了。
非常建议完全平方数和n的k个factor作为必做题而不是重复234幂啊。。
前面两次解答错误都是括号没有括起来。。麻了
- <= 要连这写,不能有空格
- {}要把一整段代码框起来
- 我怎么这么菜.jpg
- 计时 1.5h (大概)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)