摘要:Ferguson博弈(清空/分割游戏)清空/分割游戏也叫做Ferguson博弈。进行游戏需要用到两个盒子。在游戏的开始,第一个盒子中有n枚石子,第二个盒子中有m个石子(n, m > 0)。参与游戏的两名玩家轮流执行这样的操作:清空一个盒子中的石子,然后从另一个盒子中拿若干石子到被清空的盒子中,使得最后两个盒子都不空,才轮到对方取。当两个盒子中都只有一枚石子时,游戏结束。最后成功执行操作的玩家获胜。对于一个位置(x, y)来说,如果x, y中有一个偶数,那么(x, y)是N(必胜)位置。如果x和y都是奇数,那么(x, y)是P位置(必败)。可以用数学归纳法证明。证明结论:(x,y)至少一偶
阅读全文
摘要:指针一、概念1、“指针”是指地址,是常量,“指针变量”是指取值为地址的变量 变量的指针就是变量的地址。存放变量地址的变量是指针变量。二、理解1、i_pointer代表指针变量,而*i_pointer是i_pointer所指向的变量i=3;i_pointer=&i;2、调用函数swap(int *p1,int *p2){int temp;temp=*p1;*p1=*p2;*p2=temp;}main(){int a,b;int *pointer_1,*pointer_2;scanf("%d,%d",&a,&b);pointer_1=&a;poi
阅读全文
摘要:欧几里得算法两个整数a,b的最大公约数可以表示为gcd(a,b);→还可以表示成s*a+t*b (s,t为整数)→两个整数a,b的最小公倍数可以表示为lcm(a,b);一:令a=b*q+r,则r = a mod b ①假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 ②假设d 是(b,a mod b)的公约数,则 d | b , d |r ,但是a = kb +r 因此d也是(a,b)的公约数 因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等则有gcd(a,b)=gcd(b,a mod
阅读全文
摘要:getchar()1.从缓冲区读走一个字符,相当于清除缓冲区2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误3.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)getchar()使用不方便,解决方法: (1)使用下面的语句清除回车: while(getchar()!='\n'); (2)用getche()或getch()代替getc
阅读全文
摘要:给你N个正整数,求两两之差的绝对值之和。比如有4个数分别为 3,2,6,5,则答案为 |3-2| + |3-6| + |3-5| + |2-6| + |2-5| + |6-5| =14下面先对3,2,5,6进行从小到大的排序(这里可选这sort和qsort),保证每次相减都非负。然后就用下面代码实现它:sign记录这n个数,sum=0;for(i=1;i<n;i++)sum+= (sign[i]-sign[i-1])*i*(n-i);//注:若按平常思路用两个for,就很容易超时。而这种从几何上来解决这个问题,很妙!!
阅读全文