Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
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;
}