Vector Schmidt(Vector a1,Vector a2)//由a1生成一个与a2垂直的向量 { Vector temp1,temp2; temp2=Multiple(dot_product(a1,a2)/dot_product(a2,a2),a2); temp1=Minus(a1,temp2); return temp1; }
int IsBoss(double d,Position des)//判断下一时刻会不会碰到boss { int flag=0; Position Next=Add(me.pos,Multiple(5,MaximumSpeed(speed))); if (dist(Next,des)<d) flag=1; return flag; }
int IsDevour(double d,Position des)//判断下一时刻会不会碰到吞噬者 { int flag=0; Position Next; for(int i=1;i<=8;i++) { Next=Add(me.pos,Multiple(i,MaximumSpeed(speed))); if (dist(Next,des)<d) flag=1; } return flag; }
main() { FILE *fp = fopen("8.txt", "r"); long numbers[1000], x, largestProduct = 0, temp; for(x=0;x<1000;x++) { fscanf(fp,"%c", &temp); numbers[x] = temp - 48; //printf("%d\n", numbers[x]); } for(x=0;x<988;x++) { temp = Multiple(numbers, x); if(temp>largestProduct) { printf("%d\n", x); largestProduct = temp; } } printf("%ld\n",largestProduct); }
int FBorder(double r)//判断下一时刻会不会碰到边界,如果会,速度置0; { register int flag = NONE,count=0; if (me.pos.x<r && speed.x<0) speed.x=-0,flag=LEFT,count++; if (me.pos.x > kMapSize - r && speed.x>0) speed.x=-0,flag=RIGHT,count++; if (me.pos.y<r && speed.y<0) speed.y=-0,flag=BEHIND,count++; if (me.pos.y > kMapSize - r && speed.y>0) speed.y=-0,flag=FRONT,count++; if (me.pos.z<r && speed.z<0) speed.z=-0,flag=DOWN,count++; if (me.pos.z > kMapSize - r && speed.z>0) speed.z=-0,flag=UP,count++; if (count>=2) { Vector a2=Minus(boss.pos,me.pos); speed=Add(speed,Multiple(0.0005,a2)); } return flag; }
void Init(){ map = GetMap(); current_time = map -> time; register int i,j; register int AE_number; int AEflag;//记录有无AE可以走 int flag;//记录ae是否离devour太近 register int ChosenAE; Position ChosenDevour[10]; register double MinAEdistance; Position AE[50];//记录AE的位置 register int devour_number; int coming_devour=0; Position Devour[50];//记录Devour的位置 int Boss_Parameter=20; int Devour_Danger=0; register double border_r; register double F; register double dis; Vector a2;//从目标到自己的向量 border_r=0.5*me.radius; me = GetStatus() -> objects[0]; opponent_number = devour_number = see_boss = AE_number = coming_devour=0; speed.x = speed.y = speed.z = (double)0; MinAEdistance=10000; for (i = 0; i < map -> objects_number; ++i) { F= (double)0, dis = dist(map -> objects[i].pos, me.pos); switch (map -> objects[i].type){ case PLAYER: /*if (map -> objects[i].team_id == GetStatus() -> team_id) break; opponent[opponent_number++] = map -> objects[i]; if (me.radius < map -> objects[i].radius) F = RUN_VALUE * me.radius * map -> objects[i].radius / POW(dis, 3); if (me.radius > map -> objects[i].radius && me.skill_level[SHORT_ATTACK] || me.skill_level[SHORT_ATTACK]>=5) F = CHASING_VALUE * me.radius * map -> objects[i].radius / POW(dis, 3);*/ break; case ENERGY: F = ENERGY_VALUE * POW(me.radius, 2) / POW(dis, 3); if (IsBorder(border_r,map -> objects[i].pos))//如果到边界的距离小于r,力为0 F=0; break; case ADVANCED_ENERGY: AE[AE_number++]=map -> objects[i].pos; break; case DEVOUR: Devour[devour_number++]=map -> objects[i].pos; break; case BOSS: boss = map -> objects[i]; see_boss = 1; boss_r = boss.radius; boss_warning = (int)(dis < 1.2 * boss_r && me.radius<boss_r); break; default: break; } //printf("F=%f\n",F);//F=0.000061~0.001110 a2=Minus(map -> objects[i].pos,me.pos); speed=Add(speed,Multiple(F,a2)); } if (AE_number)//处理AE { AEflag=0; for(i=0;i<AE_number;i++) { dis=dist(AE[i], me.pos); //printf("AE %d dis=%f\n",i,dis); if (IsBorder(border_r,AE[i])) continue; for(j=0,flag=0;j<devour_number;j++) if (dist(AE[i],Devour[j])<me.radius && dist(AE[i],me.pos)>0.6*dist(Devour[j],me.pos)) flag=1; if (flag) continue; dis=dist(AE[i], me.pos); if (MinAEdistance>dis) { MinAEdistance=dis; ChosenAE=i; AEflag=1; } } if (AEflag) { /*if (me.skill_level[SHORT_ATTACK]>=5 && me.skill_level[HEALTH_UP]>=4) AE_Parameter=0; else AE_Parameter=100;*/ a2=Minus(AE[ChosenAE],me.pos); F = AE_Parameter * POW(me.radius, 2) / POW(MinAEdistance, 3); speed=Add(speed,Multiple(F,a2)); //printf("chosen ae= %d dis=%f\n",ChosenAE,MinAEdistance); } } /*if (me.radius>1.2*boss_r && see_boss)//如果比boss大,去吃 { a2=Minus(boss.pos,me.pos); //printf("eating boss!\n"); F=CHASING_BOSS_VALUE * POW(me.radius, 2) / POW(length(a2), 3); speed=Add(speed,Multiple(F,a2)); }*/ FBorder(1.1*me.radius);//如果碰到边界,速度置0 Devour_Danger=!(me.shield_time>20 && me.skill_level[SHIELD]==5); if (Devour_Danger) { for (i=0;i<devour_number;i++)//处理吞噬者 if (IsDevour(1.1*me.radius,Devour[i]))//如果会碰到devour,速度正交化 ChosenDevour[coming_devour++]=Devour[i]; if (coming_devour==1) { a2=Minus(ChosenDevour[0],me.pos); //printf("devour!\n"); speed=Schmidt(speed,a2); } else if (coming_devour>=2) { a2=Minus(ChosenDevour[0],me.pos); //printf("devour!\n"); speed=Schmidt(speed,a2); } } if (boss_warning && IsBoss(boss_r+me.radius,boss.pos))//如果碰到boss,正交化 { a2=Minus(boss.pos,me.pos); //printf("boss!\n"); speed=Schmidt(speed,a2); } speed.x *= 100 + rand() % 5; speed.y *= 100 + rand() % 5; speed.z *= 100 + rand() % 5; }
int main(void) { /*输出计算数据*/ int count=1; /*保存数据*/ int total[39]; for(int i=0; i<39 ; i++) { total[i]=i+14; /*printf("total[%d]=%d\n",i,total[i]);*/ } /*3次循环除以2-13*/ for(int k=0;k<3;k++) { for(int j=2;j<14;j++) { int s=0; while(total[s]%j!=0) s++; total[s]/=j; } } for(int t=0;t<39;t++) { if(total[t] > 1) printf("%d ",total[t]); } for(int t=0;t<39;t++) { if(count*total[t]>11297762) { printf("\ncount=%d\n",count); count=total[t]; } else count*=total[t]; } printf("\ncount=%d\n",count); memset(A,0x00,sizeof(A));sprintf(A,"%d",1); /*将total里的每个数字相乘*/ for(int l=0;l<39;l++) { memset(B,0x00,sizeof(B)); sprintf(B,"%d",total[l]); memset(C,0x00,sizeof(C)); printf("A=[%s]\t", A); printf("B=[%s]\t", B); Multiple(A, B, C); /* 将计算结果中的C赋值回A */ int m = 0, h = 0; while(C[m] == '0') m++; while(C[m] != 0x00) A[h++]=C[m++]; /*printf("Aout=[%s]\n", A);*/ } /*将count里的每个数字相乘*/ int D[]={534888,458490,1771560,246820,2118760,204}; memset(A,0x00,sizeof(A));sprintf(A,"%d",1); for(int l=0;l<6;l++) { memset(B,0x00,sizeof(B)); sprintf(B,"%d",D[l]); memset(C,0x00,sizeof(C)); printf("A=[%s]\t", A); printf("B=[%s]\t", B); /*printf("C=[%s]\n", C);*/ Multiple(A, B, C); /*printf("Cout=%s\n", C);*/ /* 将计算结果中的C赋值回A */ int m = 0; while(C[m] != 0x00) A[m]=C[m],m++; } return 0; }