【洛谷题单】——【入门2】分支结构(全)

P2433【深基1-2】小学数学 N 合一

问题一

直接输出即可

问题二

数学问题,注意输出格式:中间使用空格分开

问题三

数学问题,注意输出格式:每个数字一行

问题四

注意点是保留6位有效数字而不是保留6为小数,本题只需要保留3位小数

问题五

数学问题
【洛谷题单】——【入门2】分支结构(全)_第1张图片

问题六

sqrt()函数是用来开根号的,使用前需要加头文件:#include< cmath >
【洛谷题单】——【入门2】分支结构(全)_第2张图片

问题七

数学问题,注意输出格式即可

问题八

本题易错点在于类型转换,求球的体积时不能直接4/3,会导致精度有问题,应该用4.0/3,将4转化为浮点数

问题九

数学问题

问题十

【洛谷题单】——【入门2】分支结构(全)_第3张图片

问题十一

追击问题,直接用路程差/速度差

问题十二

方法一:直接数
方法二:利用ASCII表求,注意类型转换

问题十三

【洛谷题单】——【入门2】分支结构(全)_第4张图片

问题十四

【洛谷题单】——【入门2】分支结构(全)_第5张图片

参考代码

#include
#define int long long
#define PI 3.141593
using namespace std;
signed main()
{
	int t;
	cin>>t;
	if(t==1)
	{
		cout << "I love Luogu!";
	}
	else if(t==2)
	{
		cout<<"6 4";
	}
	else if(t==3)
	{
		cout<<"3\n12\n2\n";
	}
	else if(t==4)
	{
		double a=500;
		int b=3;
		double ans=a/b;
		printf("%.3lf",ans);
	}
	else if(t==5)
	{
		int s1=260,s2=220,v1=12,v2=20;
		int ans=(s1+s2)/(v1+v2);
		cout<<ans;
	}
	else if(t==6)
	{
		cout<<sqrt(6*6+9*9);
	}
	else if(t==7)
	{
		int a=100;
		cout<<a+10<<endl<<a+10-20<<endl<<"0\n";
	}
	else if(t==8)
	{
		cout<<PI*10<<endl<<PI*25<<endl<<4.0/3*PI*125<<endl;
	}
	else if(t==9)
	{
		cout<<"22";
	}
	else if(t==10)
	{
		cout<<"9";
	}
	else if(t==11)
	{
		cout<<(double)100/3;
	}
	else if(t==12)
	{
		cout<<(int)('M'-'A')+1<<"\n"<<(char)(18+'A'-1);
	}
	else if(t==13)
	{
		cout<<(int)(pow(4.0/3*PI*(4*4*4+10*10*10),1.0*1/3));
	}
	else if(t==14)
	{
		cout<<"50";
	}
	return 0;
}

P5709 【深基2.习6】Apples Prologue / 苹果和虫子

分析

本题有两个坑

  • t可以等于0,当t等于0时如何计算?
  • 题目问的是还剩多少完整的苹果,也就是说吃了但没吃完的不算(思考这个该怎么算!很重要)
  1. 当t=0时可以直接看成能一瞬间吃完所有苹果,可以单独特判一下,直接输出0
  2. 我们先想一下什么情况下会出现没吃完的苹果:s不能整除t,换句话说就是判断s%t是否等于0,如果能整除就不用+1,否则就需要+1(代码形式:s%t == 0?0:1

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int m,t,s;
	cin>>m>>t>>s;
	int sum;//记录t分钟一共吃了多少苹果
	if(t==0)
	{
		sum=m;
	}
	else
	{
		sum=s/t+(s%t==0?0:1);
	}
	if(sum>m) cout<<"0\n";
	else cout<<m-sum<<"\n";
	return 0;
}

P5710 【深基3.例2】数的性质

分析

分别讨论四个人什么时候满足条件即可,第三个人从正面讨论比较麻烦可以先从反面讨论

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int x;
	cin>>x;
	int a,b,c,d;
	if(x%2==0&&x>4&&x<=12) a=1;
	else a=0;
	if(x%2==0||x>4&&x<=12) b=1;
	else b=0;
	if(x%2==0&&x>4&&x<=12||x%2==1&&x<=4||x>12) c=0;
	else c=1;
	if(x%2==1&&x<=4||x>12) d=1;
	else d=0;
	cout<<a<<" "<<b<<" "<<c<<" "<<d;
	return 0;
}

P5711 【深基3.例3】闰年判断

分析

判断闰年的条件

  • 是4的倍数但不是100的倍数
  • 是400的倍数

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int year;
	cin>>year;
	if(year%4==0&&year%100!=0||year%400==0) cout<<"1";
	else cout<<"0";
	return 0;
}

P5712 【深基3.例4】Apples

分析

分情况讨论直接输出,注意一下格式就行

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int x;
	cin>>x;
	if(x<=1)
	{
		cout<<"Today, I ate "<<x<<" apple.";
	}
	else
	{
		cout<<"Today, I ate "<<x<<" apples.";
	}
	return 0;
}

P5713 【深基3.例5】洛谷团队系统

分析

单独算出两种情况下的时间,然后做比较

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int n;
	cin>>n;
	int ans1,ans2;//分别计算两种情况下的时间,然后比较
	ans1=n*5;
	ans2=11+n*3;
	if(ans1<ans2) cout<<"Local";
	else cout<<"Luogu";
	return 0;
}

P5714 【深基3.例7】肥胖问题

分析

易错点,如果直接double ans=m/h*h;结果会出问题,正确的应该是:double ans=m/(h * h);

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	double m,h;
	cin>>m>>h;
	double ans=m/(h*h);
	if(ans<18.5) cout<<"Underweight";
	else if(ans>=18.5&&ans<24) cout<<"Normal";
	else
	{
		cout<<ans<<endl;
		cout<<"Overweight";
	}
	return 0;
}

P5715 【深基3.例8】三位数排序

分析

  • c++直接使用sort函数排序
  • c语言可以使用qsort函数排序

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int s[3];
	cin>>s[0]>>s[1]>>s[2];
	sort(s,s+3);
	for(int i=0;i<3;i++)
	{
		cout<<s[i]<<" ";
	}
	return 0;
}

P5716 【深基3.例9】月份天数

分析

单独考虑一下闰年和非闰年
然后一般情况下月份的天数都是固定的,可以直接用数组存储,方便直接输出

参考代码

#include
#define int long long
using namespace std;
int s[14]={0,31,28,31,30,31,30,31,31,30,31,30,31};//存储月份的天数

signed main()
{
	int y,m;
	cin>>y>>m;
	//闰年
	if(y%4==0&&y%100!=0||y%400==0)
	{
		if(m==2) cout<<"29";
		else cout<<s[m];
	}
	else cout<<s[m];
	return 0;
}

P1085 [NOIP2004 普及组] 不高兴的津津

分析

用maxx记录最不高兴的程度,如果当天不高兴的程度大于之前的,更新maxx,同时记录一下星期几d

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int a,b;
	int maxx=0,d=0;//maxx记录不高兴的程度,d记录最不高兴的日期
	for(int i=1;i<=7;i++)
	{
		cin>>a>>b;
		int sum=a+b;
		if(sum>8&&sum>maxx)
		{
			maxx=sum;
			d=i;
		}
	}
	cout<<d<<"\n";
	return 0;
}

P1909 [NOIP2016 普及组] 买铅笔

分析

和第二题大同小异,思想差不多,就是看能不能整除,不能的话就需要多买一个,分三种情况讨论,把每次买的价格和ans(存储最低的价格)比较,如果小于ans就更新ans,否则不变

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int n;
	cin>>n;
	int nums,val;
	int ans=1e9;
	for(int i=0;i<3;i++)
	{
		cin>>nums>>val;
		int tmp=(n/nums+(n%nums==0?0:1))*val;
		ans=min(ans,tmp);
	}
	cout<<ans;
	return 0;
}

P5717 【深基3.习8】三角形分类

思路

将三条边排个序,然后根据边的关系判断是哪种三角形,注意一下什么时候用单分支判断什么时候用多分支判断就行

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int d[4];
	cin>>d[1]>>d[2]>>d[3];
	sort(d + 1, d + 4);
	if(d[1] + d[2] <= d[3])
	{
		cout<<"Not triangle\n";
		return 0;
	}
	if(d[1] * d[1] + d[2] * d[2] == d[3] * d[3])	cout<<"Right triangle\n";
	else if(d[1] * d[1] + d[2] * d[2] > d[3] * d[3])	cout<<"Acute triangle\n";
	else if(d[1] * d[1] + d[2] * d[2] < d[3] * d[3])	cout<<"Obtuse triangle\n";
	if(d[1] == d[2] || d[2] == d[3] || d[3] == d[1])	cout<<"Isosceles triangle\n";
	if(d[1] == d[2] && d[2] == d[3])	cout<<"Equilateral triangle\n";
	return 0;
}


P1422 小玉家的电费

分析

分情况讨论即可

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int n;
	cin>>n;
	double ans=0;
	if(n<=150)
	{
		ans=n*0.4463;
		printf("%.1lf",ans);
	}
	else if(n>150&&n<=400)
	{
		ans=150*0.4463+(n-150)*0.4663;
		printf("%.1lf",ans);
	}
	else
	{
		ans=150*0.4463+(400-150)*0.4663+(n-400)*0.5663;
		printf("%.1lf",ans);
	}
	return 0;
}

P1424 小鱼的航程(改进版)

分析

注意点:需要开long long,因为n的数据量很大,用int会炸
思路就是暴力循环,模拟遍历一遍就可以了

参考代码

#include
#define int long long
using namespace std;
signed main()
{
    int x,n;
    cin>>x>>n;
    int ans=0;
    for(int i=0;i<n;i++)
    {
		if(x==7)
		{
			x=1;//从星期一再开始循环
		}
    	else if(x>=1&&x<=5)
		{
			ans+=250;
			x++;
		}
		else
		{
			x++;
		}
	}
	cout<<ans;
	return 0;
}

P1888 三角函数

分析

最小锐角的正弦值是用最短的边/最长的边,因此先将三个边排个序,然后就是约分,约分前需要求一下最大公约数,两个数除一下就化成最简的了

参考代码

#include
#define int long long
using namespace std;

signed main()
{
	int s[3];
	cin>>s[0]>>s[1]>>s[2];
	sort(s,s+3);
	int a=s[0],b=s[2];
	int c=__gcd(a,b);//求最大公约数
	a/=c,b/=c;
	cout<<a<<"/"<<b;
	return 0;
}

P1046 [NOIP2005 普及组] 陶陶摘苹果

分析

直接求出能够摘到的最大高度,小于等于这个高度的都能摘到

参考代码

#include
#define int long long
using namespace std;
signed main()
{
    int s[11];
    for(int i=0;i<10;i++)
    {
    	cin>>s[i];
	}
	int h;
	cin>>h;
	h+=30;
	int ans=0;
	for(int i=0;i<10;i++)
	{
		if(s[i]<=h)
			ans++;
	}
	cout<<ans;
	return 0;
}

P4414 [COCI2006-2007#2] ABC

分析

思路:s数组用来存储三个数,并排序,下标从0 ~ 2也分别对应着A ~ C,
v是一个字符串,用来存储输出的顺序,利用ASCII表的关系,将字符转化为对应的下标
【洛谷题单】——【入门2】分支结构(全)_第6张图片

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	int s[3];
	cin>>s[0]>>s[1]>>s[2];
	sort(s,s+3);
	string v;
	cin>>v;
	int a,b,c;
	for(int i=0;i<3;i++)
	{
		cout<<s[(int)(v[i]-'A')]<<" ";
	}
	return 0;
}

P1055 [NOIP2008 普及组] ISBN 号码

分析

考察字符型和整形之间的转换
不能直接用字符型中的数字和整形进行比较,需要将字符型转化为整形

参考代码

#include
#define int long long
using namespace std;
signed main()
{
	string s;
	cin>>s;
	int ans=0;
	int flag=1;
	for(int i=0;i<11;i++)
	{
		if(i==1||i==5) continue;
		ans+=(s[i]-'0')*flag;
		flag++;
	}
	ans%=11;
	if(ans>=0&&ans<=9)
	{
		if(ans==s[12]-'0') cout<<"Right";
		else 
		{
			for(int i=0;i<12;i++)
			{
				cout<<s[i];
			}
			cout<<ans;
		}
	}
	else
	{
		if(s[12]=='X') cout<<"Right";
		else
		{
			for(int i=0;i<12;i++)
			{
				cout<<s[i];
			}
			cout<<"X";
		}
		
	}
	return 0;
}

你可能感兴趣的:(洛谷题单,算法,c++,学习,c语言)