算法设计与分析Day01

算法设计与分析Day01

题目1
1 1+2 1+2+3 1+2+3+4…

int main()
{
	int temp = 0, sum = 0;
	for (int i=1;i<=100;i++)
	{
		temp += i;
		sum += temp;
	}
	cout << sum;
}

给出一个数字的循环小数表示法

在这里插入图片描述

补充知识

  • 余数检测法
    就是模拟除法的过程,比如我们要计算 1/7 这个小数的循环节,我们事先求出整数部分,也就是 1/7=0。然后再求小数部分,求出第一组商 con 和它所对应的余数 r,不难得出,con=(1×10)/7=1,r=(1×10)%7=3,如果想不明白,可以自己手算一下,然后进入循环,将第一组数据保存起来,接着算第二组,con=(3×10)/7=4,r=(3×10)%7=2。

  • stl 包括容器、迭代器和算法

  • find () 函数返回值类型的是什么?

    不论 vector 对象本身是否是常量,返回值都是 const_iterator ,const_iterator 是声明 iterator 指向的对象是常量,即 iterator 指向常对象,其本身可以变。
    如果 vector 对象不是常量,既可以使用 iterator 也可以使用 iterator_const
    iterator 能读写 vector::iterator 中的元素

          vector<int>::iterator p = find(ar2.begin(), ar2.end(), 2);
      	  cout << *p;
    
主要代码片段:
  int f(int n, int m)
{
	n = n % m;
	vector<int> v;
	for (;;)
	{
		v.push_back(n);
		n *= 10;
		n = n % m;
		if (n == 0) { return 0; }
		if (find(v.begin(), v.end(), n) != v.end())//v中可以找到n
		{
			int i= (int)(v.end()-find(v.begin(),v.end(),n));
			return i;
		}
	
	}
}
其他事项

蓝桥杯
在这里插入图片描述在这里插入图片描述

  • 示例:
    L3FxXzQwNzkzOTg5,size_16,color_FFFFFF,t_70)

时间复杂度为O(n!)
m=1 1*2 1*2*3 1*2*3*4 1*2*3*4*5
在这里插入图片描述在这里插入图片描述

  1. 每个数可以分解为若干素数的乘积(并且这种分解是唯一的),那么这个数所有因数就是这些素数任意组合后的乘积。

2.两个数的最大公因数就等于他们共有的那些素数乘起来,即重复部分。
而两个数最小公倍数就等于他们所有素数乘起来,并且去除重复部分。

3.最大公因数乘最小公倍数就等于这些素数全部乘起来,就是这两个数乘积。

#include <stdio.h>
 
int FindPrime (int num_1,int num_2);
void Max_swap (int* bigger,int* smaller); 
 
int main ()
{
	int num_1, num_2,Prime,LCM;//Prime为最大公因数,LCM(Least common multiple) 最小公倍数 
	scanf ("%d %d",&num_1,&num_2);
	Prime = FindPrime (num_1,num_2);
	LCM = num_1*num_2/Prime;
    printf ("^Prime = %d^\n^Least common multiple = %d^\n",Prime,LCM);
    return 0;
}
 
int FindPrime (int num_1,int num_2)
{//求最大公因数,更相减损法
    int temp = 1;
    while (temp){
    	Max_swap (&num_1,&num_2);//总是将 num_1 调成大于num_2 
        temp = num_1 - num_2;
        num_1 = temp; 
	}
   return num_2;
} 
 
void Max_swap (int* bigger,int* smaller)
{//将两个数重新排列 并总是将第一个数置为更大的一个 
	if (*bigger<*smaller){
		int temp;
		temp = *bigger;
		*bigger = *smaller;
		*smaller = temp;
	}
} 
--------------------- 
作者:yxp189 
来源:CSDN 
原文:https://blog.csdn.net/yxp189/article/details/80761524 

更相减损法,又称 “等值算法”
更相损减法在两数相差较大时,时间复杂度容易退化成 O (N),而辗转相除法可以稳定在 O (logN)。但辗转相除法需要试商,这就使得在某些情况下,使用更相损减法比使用辗转相除法更加简单
612-468=144,
468-144=324,
324-144=180,
180-144=36,
144-36=108,
108-36=72,
72-36=36.
因此 612 与 468 的最大公约数是 36.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值