我实在没东西写了

n+e posted @ 2016年11月01日 11:01 in 日常 , 849 阅读

微积分

马上要期中考了

习题课真丧失。。。一坨证明题。还是做考卷舒服

掐了一下时,2013年那份花了45min左右(题大家都有吧),就最后一道题最后一小问证明不是很严谨,剩下全对。(听说flag立太多不好?)

第一张10min做完。好像都是只要口算就行,比如$$\lim_{x\to \infty}\Big(\frac{1+x}{2+x}\Big)^x=\exp\Big\{\lim_{x\to \infty}(\frac{1+x}{2+x}-1)\cdot x\Big\}=\frac{1}{e}$$

$$d(x^x)=d(e^{x\ln x})=e^{x\ln x}d(x\ln x)=x^x(1+\ln x)$$而没有必要隐函数求导

大量使用 $\sin x\sim x-\frac{x^3}{6}$

如何快速开方多项式?

比如:$$\sqrt{x^4+x^2+1}\sim x^2+\frac{1}{2}$$ $$\sqrt[3]{x^3+x^2+x+1}\sim x+\frac{1}{3}$$

看起来确实很像泰勒展开。不过不要硬算。一般来说取展开式的前两项就够了。首先第一项很容易确定,第二项的次数也容易确定。那么,直接设 $(x^{k_1}+ax^{k_2})^n=x^{l_1}+x^{l_2}+...$ 只要前两项对上了就好。

啥意思呢?以第一个为例,设 $(x^2+a+...)^2=x^4+x^2+...$,显然如果要让前两项系数一样,必有 $a=\frac{1}{2}$,而 $(x^2+a)^2$ 展开后的第二项只与 $a$ 有关,因此 $a$ 是唯一确定的。

所以只要解一元一次方程就好啦~

一个小Trick

如果函数里面有 $\ln x,\ e^x$想要把它求导消掉,而系数不为常数,最好的办法是除掉一个东西,把某一项变成常数项,再求导消掉。

比如:$$f(x)=(x^2-1)\ln x-(x-1)^2$$

考虑$g(x)=\frac{x+1}{x-1}\ln x-1$

这种技巧在其他地方也是很常见的。

 

程设

鉴于很多人问进制转换

以输入二进制字符串,输出10进制数字为例:

#include <cstdio>
int x; char c;
int main()
{
	for (; c = getchar(), c >= '0';)
		x = x * 2 + c - '0';
	// x = x << 1 | (c & 15); 这句话跟上面那句话等价
	printf("%d\n",x);
}

鉴于很多人问大数求和

这玩意叫高精度加法不叫大数求和!!!

//其实拓展c++标准中还有__int128这个神奇的东西存在= =

#include <cstdio>
char a[110], b[110], c[110] = "", len_a, len_b, len_c, tmp;
int main()
{
	scanf("%s%s", a+1, b+1); //从a[1]开始
	for (len_a = 1; a[len_a]; len_a++);
		len_a--;
	for (len_b = 1; b[len_b]; len_b++);
		len_b--;
	len_c = len_a > len_b ? len_a : len_b;
	for (int i = 1, j = len_a; i < j; i++, j--)
	{//翻转数组
		tmp = a[i];
		a[i] = a[j];
		a[j] = tmp;
	}
	for (int i = 1; i <= len_a; i++)
		a[i] -= '0';
	//到这一步,a[1]表示最低的一位,a[len_a]表示最高的一位
	for (int i = 1, j = len_b; i < j; i++, j--)
	{
		tmp = b[i];
		b[i] = b[j];
		b[j] = tmp;
	}
	for (int i = 1; i <= len_b; i++)
		b[i] -= '0';
	for (int i = 1; i <= len_c; i++)
	{
		c[i] += a[i] + b[i];//如果不翻转,下标难处理
		if (c[i] >= 10)
		{//进位
			c[i] -= 10;
			c[i + 1]++;
		}
	}
	if (c[len_c + 1]) len_c++;//处理最高位的进位
	for (int i = len_c; i; i--)//翻转回来
		printf("%d",c[i]);
	return 0;
}

鉴于四班的某位不愿透露姓名的赵大神问了如何用函数返回数组

如果在函数里面正常开一个数组a,比如 int a[10]={0}; 然后做一些事情,再return a; 这样是不对滴,因为返回的时候,c++会自动把所有在这个函数中声明过的局部变量给delete掉,然后在main里面就无法访问a了。

怎么办呢?使用new关键字,就像下面这样:

//new是啥意思呢?就把它当做一个能在函数里面声明不会被delete掉的变量的东西就好了。

#include <cstdio>
int check(int x)
{
	int a[100] = {0}, len = 0;
	for (; x; x /= 10)
		a[++len] = x % 10;
	for (int i = 1, j = len; i < j; i++, j--)
		if(a[i] != a[j])
			return 0;
	return 1;
}
int* palindrome(int n)
{
	int *a, *b;
	a = b = new int[100];
	for (int i = 1; i <= n; i++)
		if (check(i) && check(i * i)
		 && check(i * i * i))
		*a++ = i;
	*a++ = 0;
	return b;
}
int main()
{
	int n; scanf("%d", &n);
	int *a = palindrome(n);
	while (*a) printf("%d ", *a++);
	puts("");
}

思修

习题十二答案

D;BD;ACD;AC;

听说还要写Mooc总结?mdzz

---By n+e

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter