[学习报告]《LeetCode零基础指南》(第2讲) 樱桃小完犊子哦

发布于:2022-12-09 ⋅ 阅读:(590) ⋅ 点赞:(0)

流浪地球,第二天

 

目录

# 一、今日知识点总结

# 二、今日做题记录

1.实现1到n的和

2.判断一个数是不是2的幂:

3. 判断3的幂:

4.判断4的幂:

注:

 5.n的k个因子:

6.判断一个数n是不是完全平方数:

# 三、今日收获


# 一、今日知识点总结

1.for循环的结构和使用

2.用uint定义防止溢出

# 二、今日做题记录

1.实现1到n的和

利用输入n的迭代,重复把n从n开始到0,加给sum,打印输出sum即可,当然也可以用for循环遍历做,当然也可以用for循环去加,这种容易想到,就不展示代码了


#include "stdio.h" 

int main()
{
	int n,sum;
	scanf("%d",&n);
	while(n)
	{
		sum+=n;
		n--;
	}
	printf("%d",sum);
	return 0;
}

2.判断一个数是不是2的幂:

利用位运算,因为计算机的计算是二进制的,所以进行的四则运算在计算机内实际上是二进制的运算,利用2的幂的数用二进制表示都是10000……,让其减一就会变成01111……,让这两个数进行位与运算,结果就一定是0,按照下述代码即可完成目标:

#include <stdio.h>          
int main()
{
	int x;
	scanf("%d",&x) ;
	if(x&(x-1))
	{
		printf("%d不是2的幂!",x); 
	}
	else 
	{
		printf("%d是2的幂!",x);
	}
	return 0;
}

当然也可以用 for循环去遍历,代码如下:

#include "stdio.h"
bool isPowerOfTwo(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;
}

int main()
{
	int num;
	char yes,no;
	scanf("%d",&num);
	if(isPowerOfTwo(num)==1)
	{
		printf("%d是2的幂",num);
	}
	else
	{
		printf("%d不是2的幂",num);
	}

	
	return 0;
} 

3. 判断3的幂:

不做多的讲解,方法如上,代码如下:

#include "stdio.h"

int  isPowerOfTwo(int n){
    int i;
    unsigned int k = 1;        // (1)
    if(n <= 0) {
        return 0;          // (2)
    }
    if(n == 1) {
        return 1;           // (3)
    }
    for(i = 1; i <= 21; ++i) {
        k *= 3;                // (4)
        if(k == n) {
            return 1;       // (5)
        }
    }
    return 0;
}

int main()
{
	int num;
	char yes,no;
	scanf("%d",&num);
	if(isPowerOfTwo(num)==1)
	{
		printf("%d是3的幂",num);
	}
	else
	{
		printf("%d不是3的幂",num);
	}

	
	return 0;
} 

4.判断4的幂:

方法如上,代码如下:

#include "stdio.h"

int  isPowerOfTwo(int n){
    int i;
    unsigned int k = 1;        // (1)
    if(n <= 0) {
        return 0;          // (2)
    }
    if(n == 1) {
        return 1;           // (3)
    }
    for(i = 1; i <= 17; ++i) {
        k *= 4;                // (4)
        if(k == n) {
            return 1;       // (5)
        }
    }
    return 0;
}

int main()
{
	int num;
	char yes,no;
	scanf("%d",&num);
	if(isPowerOfTwo(num)==1)
	{
		printf("%d是4的幂",num);
	}
	else
	{
		printf("%d不是4的幂",num);
	}

	
	return 0;
} 

注:

判断不同数的幂只需要修改相应地方的数即可,唯一注意的就是溢出问题,这里我交大家怎么去计算,代码如下,简单易懂:

#include "stdio.h"
#include "math.h"

int main()
{
	int i,n;
	for(i=1;;++i)
	{
		if(pow(4,i)>pow(2,32))return i;
	}
	
}

 只需要修改黑框中的值,在红框中便能得到对应的值

 

 5.n的k个因子:

代码如下:

#include "stdio.h"

int kthFactor(int n,int k)
{
	int i,cout=0;
	for(i=1;i<=n;i++)
	{
		if(n%i==0)
		{
		  cout++;
		  if(cout==k)
		  {
			return i;
		  }
	    }
	}
	return -1;
}
int main()
{
	int n,k;
	scanf("%d%d",&n,&k);
	printf("%d",kthFactor(n,k));
	return 0;
}

6.判断一个数n是不是完全平方数:

定义一个变量x,让x从0开始一直遍历到n,对于每一个x都让它等于自己与自己相乘,并与n进行比较,如果得到的结果与n相等,则说明n是完全平方数,代码如下:

#include "stdio.h"

int kthFactor(int n,int k)
{
	int i,cout=0;
	for(i=1;i<=n;i++)
	{
		if(n%i==0)
		{
		  cout++;
		  if(cout==k)
		  {
			return i;
		  }
	    }
	}
	return -1;
}
int main()
{
	int n,k;
	scanf("%d%d",&n,&k);
	printf("%d",kthFactor(n,k));
	return 0;
}

# 三、今日收获

1.for循环中的++i和i++用处一样,但++i所运行的时间更短,推荐使用++i

2.学会了可以利用定义死循环去遍历所有的数,但会溢出

3.学会用计算机去计算一些复杂的问题,比如上述用计算机去计算n的y次幂,在不溢出的情况下,y能取得的最大值

4.在进行初始化时,要从0开始计数的变量,必须初始化为0

5.为了防止溢出,在条件允许的情况下,尽量定义成无符号类型。

本文含有隐藏内容,请 开通VIP 后查看