内容会持续更新,有错误的地方欢迎指正,谢谢!
小易的升级之路
小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3…bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少?
#include <iostream>
using namespace std;
int main()
{
int n,a,i;
int array[100010]={0};
while(cin>>n>>a)
{
for(i=1;i<=n;++i)
{
cin>>array[i];
if(array[i]<=a)
a+=array[i];
else
{
int a2=a,temp=a;
while(array[i]%a2!=0)
{
temp=array[i]%a2;
array[i]=a2;
a2=temp;
}
a+=temp;
}
}
cout<<a<<endl;
}
return 0;
}
炮台攻击
兰博教训提莫之后,然后和提莫讨论起约德尔人,谈起约德尔人,自然少不了一个人,那 就是黑默丁格——约德尔人历史上最伟大的科学家. 提莫说,黑默丁格最近在思考一个问题:黑默丁格有三个炮台,炮台能攻击到距离它R的敌人 (两点之间的距离为两点连续的距离,例如(3,0),(0,4)之间的距离是5),如果一个炮台能攻击 到敌人,那么就会对敌人造成1×的伤害.黑默丁格将三个炮台放在N*M方格中的点上,并且给出敌人 的坐标. 问:那么敌人受到伤害会是多大?
#include <iostream>
#include <algorithm>
using namespace std;
struct Pos
{
int x;
int y;
};
int main()
{
int r;
int num;
while(cin>>r)
{
num=0;
Pos pos1,pos2,pos3,pos0;
cin>>pos1.x>>pos1.y>>pos2.x>>pos2.y>>pos3.x>>pos3.y>>pos0.x>>pos0.y;
float dis1,dis2,dis3;//需要为float
dis1=sqrt(pow(abs(pos1.x-pos0.x),2)+pow(abs(pos1.y-pos0.y),2));
dis2=sqrt(pow(abs(pos2.x-pos0.x),2)+pow(abs(pos2.y-pos0.y),2));
dis3=sqrt(pow(abs(pos3.x-pos0.x),2)+pow(abs(pos3.y-pos0.y),2));
if(dis1<=r)
++num;
if(dis2<=r)
++num;
if(dis3<=r)
++num;
cout<<num<<"x"<<endl;
}
return 0;
}
扫描透镜
在N*M的草地上,提莫种了K个蘑菇,蘑菇爆炸的威力极大,兰博不想贸然去闯,而且蘑菇是隐形的.只 有一种叫做扫描透镜的物品可以扫描出隐形的蘑菇,于是他回了一趟战争学院,买了2个扫描透镜,一个 扫描透镜可以扫描出(3*3)方格中所有的蘑菇,然后兰博就可以清理掉一些隐形的蘑菇. 问:兰博最多可以清理多少个蘑菇?
注意:每个方格被扫描一次只能清除掉一个蘑菇。
#include <iostream>
#include <algorithm>
using namespace std;
struct Pos
{
int x;
int y;
};
int main()
{
int n,m,k;
while(cin>>n>>m>>k)
{
int map[25][25]={0};
int allMax=0;
Pos array[105];
for(int i=1;i<=k;++i)
{
cin>>array[i].x>>array[i].y;
map[array[i].x][array[i].y]++;
}
int j,a,b,c,d,e;
int sum=0,max=0;
int count=2;
while(count--)
{
for(j=2;j<=n-1;++j)
{
for(a=2;a<=m-1;++a)
{
sum=0;
for(b=-1;b<=1;++b)
for(c=-1;c<=1;++c)
if(map[j+b][a+c]>0)
sum+=1;
if(max<sum)
{
max=sum;
d=j;
e=a;
}
}
}
for(b=-1;b<=1;++b)
for(c=-1;c<=1;++c)
if(map[d+b][e+c]>0)
map[d+b][e+c]--;
allMax+=max;
max=0;
}
cout<<allMax<<endl;
}
return 0;
}