暑假学习部分总结

7月22日 暑假学习部分总结。
看样子要想把基础复习一边还需要点时间,已经四天了,应该还需要两天吧,或许更多。
一,难点或者是易混淆的点
1,主对角线很明显是i=j。副对角线是i+j等于n;
2,杨辉三角可以将金字塔形状的转化为直角三角形,也就是线性代数里面的下三角。以后做题时也要将图形进行变换。
3,goto L时,记得中间不允许有变量被定义。
4,在,cmath头文件下,不允许有全局变量y1,j1等,因为这是一个定义过的函数,但是在main里面写作为局部变量。
5,gets读取的是一整行,而puts自己就有一个换行符。
6,strlwr是将字符串中的大写字母改成小写字母,strupr相反。(第一次见这两个函数)
7,如果在某个主调函数里面声明了函数原型,那函数只能在这个主调函数里面使用。
8*函数的调用过程实际上是对栈空的操作过程,因为调用函数是使用栈空间来保存信息。回复主调函数的运行状态,释放被调用函数的栈空间,按其返回地址返回到调用函数。
9,辗转相除法需要用到高精度除法,而二进制公约数算法只用到除二和减法精度更高,而且时间更少。底下第4个题就是二进制最大公约数算法。(像什么短除法,更相易损法,就不在这里提了,网上都有。)

*二,有价值的题。
1,约瑟夫问题(Josephu)常见的变例有猴子选大王,持密码报数,狐狸追兔子问题。
题意,有n个人围成一圈,从第一个开始报数,报道m的人出列,求出列的顺序。
(注意每次这个人出列了,是从这个肉的下一个人开始从一报数。)
while(i1<=n)
{
i2++;
if(i2=(=)n+1) i2=1;
if(a[i2](=)=0) i3++;
if(i3==m)
{
i3=0;
cout<i2;
a[i2]=1;i1++;}}

2,质数筛法,原理就是如果这个数是质数那这个数的倍数一定不是质数,如果当前这个数已经被标记过不是质数了,那就不用操作了。
for(i1=2;i1<=sqrt(n);i1++)
{
if(a[i1])
for(j=2;j<=n/i;j++) a[i1*i2]=0;}
注意(1)一重循环是从2开始。(2)一重循环截止到根号下n。(3)二重循环是在if里面,不是if在二重循环里面。

3,蛇形填充把我自己写的代码和题解放了出来也不难,但是题解就写的太好了。(放到最后了,有兴趣的小伙伴可以看一看。)
4,
int gcd(int m,int m)
{
if(m=(=)n) return m;
if(m<n) return gcd(n,m)
if(m%2=(=)0)
{
if(n%2==0) return 2*gcd(m/2,n/2);
else return gcd(m/2,n);
}
else {
if(n%2=0) return gcd(m,n/2);
else return gcd(n,m-n);}}


简单说一下,如果两者都是偶数就返回2*两者的公因数,如果都是奇数,就返回n和m-n,如果一个奇一个偶,就返回偶数除2和奇的公约数,相同就退出。

5,有n个数在数组中,要求判断找出k个数,这k个数的和是m。
这个题是个典型的递归。分析问题不难看出,对于每一个数都有两种可能加上这个数是和等于m或者是不加这个数和等于m。
如果不加这个数和等于m的话,也就是从剩下的n-1个数中找出k个数组成m。
如果加上这个数等于m的话,就是剩下的n-1个数中找出k个数来组成m-a[i]。
void sum (int n,int m)
{
if(a[n]=m) flag=true;
else if(n==1) break;
else {
sum(n-1,m-a[n]);
sum(n-1,m);
}
}
(看会有黄色的标记,也不知道怎么回事,好像是格式有问题?显示不出来吗?两个等号就会出现黄色标记,我改成了(=)=了,读者请注意。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值