제6 장 연습 문제 - 3 - 무림 - 2785
#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <vector>
#include <list>
#include <math.h>
#include <algorithm>
using namespace std;
typedef struct Hero
{
int x;
int y;
int a;
int b;
int c;
bool live;
bool dir;// true, false
}Hero;
int searchNum(int x , int y , Hero *h, int *p )
{
int i , num = 0 ;
for( i = 0 ; h[i].x!='\0' ; i++ )
{
if( h[i].x == x && h[i].y == y && h[i].live == true )
{
num++;
*p = i;
}
}
return num;
}
void MoveS(Hero *h)
{
int i;
for( i = 0 ; h[i].x!='\0' ; i++ )
{
if( h[i].live )
{
if( h[i].dir )
{
if( h[i].x < 12 ) h[i].x ++ ;
else if( h[i].x == 12 )
{
h[i].dir = false;
h[i].x = 11;
}
}
else
{
if( h[i].x > 1 ) h[i].x -- ;
else if( h[i].x == 1 )
{
h[i].dir = true;
h[i].x = 2;
}
}
}
}
}
void MoveW(Hero *h)
{
int i;
for( i = 0 ; h[i].x!='\0' ; i++ )
{
if( h[i].live )
{
if( h[i].dir )
{
if( h[i].y < 12 ) h[i].y ++ ;
else if( h[i].y == 12 )
{
h[i].dir = false;
h[i].y = 11;
}
}
else
{
if( h[i].y > 1 ) h[i].y -- ;
else if( h[i].y == 1 )
{
h[i].dir = true;
h[i].y = 2;
}
}
}
}
}
void MoveE(Hero *h)
{
int i;
for( i = 0 ; h[i].x!='\0' ; i++ )
{
if( h[i].x==1 && h[i].y==12 )continue;
if( h[i].x==12 && h[i].y==1 )continue;
if( h[i].live )
{
if( h[i].dir )
{
if( h[i].x < 12 && h[i].y < 12 )
{
h[i].x++;
h[i].y++;
}
else
{
h[i].dir = false;
h[i].x--;
h[i].y--;
}
}
else
{
if( h[i].x > 1 && h[i].y > 1 )
{
h[i].x--;
h[i].y--;
}
else
{
h[i].dir = true;
h[i].x++;
h[i].y++;
}
}
}
}
}
int main()
{
int n, step, i , j;
int sp, wp, ep;//
int num_s, num_w, num_e ;//
char pai;
Hero s[1001],w[1001],e[1001];
scanf("%d",&n);
while(n--)
{
scanf("%d", &step);
sp = wp = ep = 0 ;
while( scanf("%c",&pai) && pai != '0' )
{
switch(pai)
{
case 'S':
scanf("%d %d %d %d %d",&s[sp].x, &s[sp].y, &s[sp].a, &s[sp].b, &s[sp].c );
s[sp].live = true;
s[sp].dir = true;
sp ++;
break;
case 'W':
scanf("%d %d %d %d %d",&w[wp].x, &w[wp].y, &w[wp].a, &w[wp].b, &w[wp].c );
w[wp].live = true;
w[wp].dir = true;
wp ++;
break;
case 'E':
scanf("%d %d %d %d %d",&e[ep].x, &e[ep].y, &e[ep].a, &e[ep].b, &e[ep].c );
e[ep].live = true;
w[wp].dir = true;
ep ++;
break;
}
}
s[sp].x = w[wp].x = e[ep].x = '\0';
while(step--)
{
//
for( i = 1 ; i <= 12 ; i ++ )
for( j = 1 ; j <= 12 ; j ++ )
{
num_s = searchNum( i , j , s , &sp );//sp
num_w = searchNum( i , j , w , &wp );
num_e = searchNum( i , j , e , &ep );
int attack1 , attack2 ;
if( num_s == 1 && num_w == 1 && num_e == 0 )//
{
// sp
attack1 = (int)((0.5*(double)s[sp].a + 0.5*(double)s[sp].b)*((double)s[sp].c+10) / (double)100);
// wp
attack2 = (int)((0.8*(double)w[wp].a + 0.2*(double)w[wp].b)*((double)w[wp].c+10) / (double)100);
// sp,wp
s[sp].c -= attack2;
w[wp].c -= attack1;
//
if( s[sp].c <= 0 ) s[sp].live = false;
if( w[wp].c <= 0 ) w[wp].live = false;
}
else if( num_s == 1 && num_w == 0 && num_e == 1 )//
{
// sp
attack1 = (int)((0.5*(double)s[sp].a + 0.5*(double)s[sp].b)*((double)s[sp].c+10) / (double)100);
// wp
attack2 = (int)((0.2*(double)e[ep].a + 0.8*(double)e[ep].b)*((double)e[ep].c+10) / (double)100);
// sp,wp
s[sp].c -= attack2;
e[ep].c -= attack1;
//
if( s[sp].c <= 0 ) s[sp].live = false;
if( e[ep].c <= 0 ) e[ep].live = false;
}
else if( num_s == 0 && num_w == 1 && num_e == 1 )//
{
// sp
attack1 = (int)((0.2*(double)e[ep].a + 0.8*(double)e[ep].b)*((double)e[ep].c+10) / (double)100);
// wp
attack2 = (int)((0.8*(double)w[wp].a + 0.2*(double)w[wp].b)*((double)w[wp].c+10) / (double)100);
// sp,wp
e[ep].c -= attack2;
w[wp].c -= attack1;
//
if( e[ep].c <= 0 ) e[ep].live = false;
if( w[wp].c <= 0 ) w[wp].live = false;
}
}
//
MoveS(s);
MoveW(w);
MoveE(e);
}
//vitality
int attack;
num_s = attack = 0;
for( i = 0 ; s[i].x != '\0' ; i++ )
{
if(s[i].live)
{
num_s++;
attack += s[i].c ;
}
}
printf("%d %d
",num_s,attack);
num_s = attack = 0;
for( i = 0 ; w[i].x != '\0' ; i++ )
{
if(w[i].live)
{
num_s++;
attack += w[i].c ;
}
}
printf("%d %d
",num_s,attack);
num_s = attack = 0;
for( i = 0 ; e[i].x != '\0' ; i++ )
{
if(e[i].live)
{
num_s++;
attack += e[i].c ;
}
}
printf("%d %d
***
",num_s,attack);
}
return 1;
}
이렇게 많은 코드 에 놀 라 지 마 세 요. 이 문 제 는 어 려 운 알고리즘 과 관련 되 지 않 습 니 다. 전투 과정 을 잘 고려 하고 세부 사항 에 주의 하면 됩 니 다.
좌표, 내력, 무예, 전투력, 생존 여부, 이동 방향 등 3 파 제자 들 의 정 보 를 구조 체 로 저장 합 니 다.
주요 시 뮬 레이 션 다음 과정:
① 12 * 12 개의 칸 을 스 캔 하고 칸 당 소림, 무당, 아미제 자의 개 수 는 2 개 1 개 0 의 경우 에 만 싸움 이 발생 한다.
② 전투 중 쌍방의 전투력 을 계산 하여 전후 생명력 을 계산 하고 전사 여 부 를 판단 한다.
③ 각 파 의 살 아 있 는 제 자 는 규칙 에 따라 이동한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.