计蒜客练题 普及T1 第一天

2023-05-16

正式开始练题的第一天
在计蒜客练题;
第一题 “T1079 开关灯”居然就让卡住了;
ceil()函数向上取整居然从来没用过,【math.h】 double ceil( double num );
结果把abs当成向下会取整,好尴尬;
floor()才是向下取整,【math.h】 double floor( double arg );
这要是蓝桥杯的题,恐怕我会在5分的题直接挂掉。

#include <iostream>
#include<math.h>
using namespace std;
int main(int argc, char** argv) {
	double roof,x,y,people,time=0;
	cin>>roof;
	for(int i=0;i<roof;i++)
	{
		cin>>x>>y>>people;
		time+=(sqrt(x*x+y*y)/50*2+people*1.5);
	}
	 cout<<floor(time);
	return 0;
}

第二题“T1079 开关灯”
没什么难度,但由于思维不够严谨,不该用else时却使用了else,导致关键语句被跳过了,大大的浪费时间;还有就是习惯了复制粘贴,每回都是复制过来就完事,完全不管复制以后还是不是适用。

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main(int argc, char** argv) {
	int n,m,p=0,flag[5000]={1},flag2[5000]={0};
	cin>>n>>m;
	if(m>=1)
	{
		memset(flag,0,sizeof(flag));
	}
	if(m>=2)
	{
		for(int i=1;i<n;i+=2)
		{
			flag[i]=1;
		}
	}
	if(m>2)
	{
		for(int i=3;i<=m;i++)
		{
			for(int j=i-1;j<n;j+=i)
			{
				if(flag[j]==1)
				flag[j]=0;
				else flag[j]=1;
			}
		}
	}
	for(int i=0;i<n;i++)
	{
		if(flag[i]==0)
		{
			flag2[p]=i+1;
			p++;
		}
	}
	for(int i=0;i<p-1;i++)
	{	
			cout<<flag2[i]<<',';
	}
	cout<<flag2[p-1];
	return 0;
}

第三题“T1084 雇佣兵”
居然看不懂题意,看了好几次,每一次都是根据输入输出推理题意,才搞懂题目意思;
开始一直以为是战斗力为2,那么第二天以后,每连续战斗一天,都会让战斗力加1,但发现和测试貌似对不上;题意直接扑街。。。。。

#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std; 
int main(int argc, char** argv) {
	double m,n,x;
	cin>>m>>n>>x;
	while(1)
	{
		x-=ceil(m/n);//恢复体力
		if(x<0)
		break;
		n+=floor(m/n);	//消耗体力提升战力
	}
	cout<<n;
	return 0;
}

第四题“T1096 石头剪刀布”
完美一次通过

#include <iostream>

using namespace std;

int main(int argc, char** argv) {
	int n,na,nb,p=0,q=0,sum=0,nas[100],nbs[100],num[100],nas2[100],nbs2[100];
	/*n,na,nb,nas[100],nbs[100]为输入,p=0,q=0相当于是临时变量,用sum的正负判断A赢还是B赢,nas2[100],nbs2[100]用来保存A、B在n轮内所出的手势*/
	cin>>n>>na>>nb;
	for(int i=0;i<na;i++)
	cin>>nas[i];
	for(int i=0;i<nb;i++)
	cin>>nbs[i];
	for(int i=0;i<n;i++)//保存A、B在n轮内所出的手势
	{
		nas2[i]=nas[p];
		p++;
		if(p==na)
		p=0;
		nbs2[i]=nbs[q];
		q++;
		if(q==nb)
		q=0;
	}
	for(int i=0;i<n;i++)//判断A、B谁赢
	{
		if(nas2[i]==nbs2[i])//手势相同
		continue;
		if(nas2[i]+nbs2[i]==2)//一个石头,一个剪刀
		{
			if(nas2[i]==0)
			sum++;
			else sum--;	
		}
		if(nas2[i]+nbs2[i]==5)
		{
			if(nas2[i]==0)
			sum--;
			else sum++;	
		}
		if(nas2[i]+nbs2[i]==7)
		{
			if(nas2[i]==2)
			sum++;
			else sum--;	
		}
	}
	if(sum>0)
	cout<<"A";
	if(sum<0)
	cout<<"B";
	if(sum==0)
	cout<<"draw";
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计蒜客练题 普及T1 第一天 的相关文章

随机推荐