1 n*n个小正方形,有几个正方形?
1.把正方形看做左下的顶点2.顶点可以左右,上下移动,用(x,y)表示,移动的结果跟顺序没有关系。3一条边正方形x,y<=n次,k边x,y<=(n-k+1)次
4总就是1^2+2^2+...+n^2=n(n+1)(2n+1)/6
2一个有序循环数列,把前面的那段放到尾,查找一个数?
3、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 int main(void) 3 { 4 //(blue,red) 的个数用(x,y)来表示,y=2-x,x=0,1,2; 5 int num[3]={1, 1, 1};//0表示不可能是解,1表示是解 6 int num1[3]={1, 1, 1}; 7 int x1,x2,x3,i,j,sum; 8 for (x1=0;x1<=2;x1++)//A 9 { 10 for (x2=0;x2<=2;x2++)//B 11 { 12 for(x3=0;x3<=2;x3++)//C 13 { 14 // A、 B、 C不知道的必要条件 15 if (x2+x3==0||x2+x3==4||x1+x3==0||x1+x3==4||x1+x2==0||x1+x2==4) 16 { 17 continue; 18 } 19 //初步筛选后的(A,B,C)组合 20 //判断C解是否唯一 21 for (i=0;i<=2;i++) 22 { 23 num[i]=1; 24 if (x1+i==0||x1+i==4||x2+i==0||x2+i==4) 25 { 26 num[i]=0; 27 continue; 28 } 29 //B解是否唯一 30 for (j=0;j<=2;j++) 31 { 32 num1[j]=1; 33 if (x1+j==0||x1+j==4||j+i==0||j+i==4) 34 { 35 num1[j]=0; 36 } 37 } 38 sum=num1[0]+num1[1]+num1[2]; 39 if (sum==1) 40 { 41 num[i]=0; 42 } 43 } 44 sum=num[0]+num[1]+num[2]; 45 if (sum==1) 46 { 47 continue; 48 } 49 50 51 printf("A is %d,B is %d,C is %d\n", x1,x2,x3); 52 } 53 } 54 } 55 56 return 0; 57 }
4、query一直在增加,假设用n来表示,只能保存m条,怎么实现每个query等概率保存?
每次产生的最新的query:m/n保存即可;数学归纳一下即可! 不过有些别扭,一般是抽个样,多大的概率。现在是反过来多大概率保存!