直接输出即可
数学问题,注意输出格式:中间使用空格分开
数学问题,注意输出格式:每个数字一行
注意点是保留6位有效数字而不是保留6为小数,本题只需要保留3位小数
数学问题
sqrt()函数是用来开根号的,使用前需要加头文件:#include< cmath >
数学问题,注意输出格式即可
本题易错点在于类型转换,求球的体积时不能直接4/3,会导致精度有问题,应该用4.0/3,将4转化为浮点数
数学问题
追击问题,直接用路程差/速度差
方法一:直接数
方法二:利用ASCII表求,注意类型转换
#include<bits/stdc++.h>
#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;
}
本题有两个坑
- t可以等于0,当t等于0时如何计算?
- 题目问的是还剩多少完整的苹果,也就是说吃了但没吃完的不算(思考这个该怎么算!很重要)
- 当t=0时可以直接看成能一瞬间吃完所有苹果,可以单独特判一下,直接输出0
- 我们先想一下什么情况下会出现没吃完的苹果:s不能整除t,换句话说就是判断s%t是否等于0,如果能整除就不用+1,否则就需要+1(代码形式:s%t == 0?0:1)
#include<bits/stdc++.h>
#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;
}
分别讨论四个人什么时候满足条件即可,第三个人从正面讨论比较麻烦可以先从反面讨论
#include<bits/stdc++.h>
#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;
}
判断闰年的条件
- 是4的倍数但不是100的倍数
- 是400的倍数
#include<bits/stdc++.h>
#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;
}
分情况讨论直接输出,注意一下格式就行
#include<bits/stdc++.h>
#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;
}
单独算出两种情况下的时间,然后做比较
#include<bits/stdc++.h>
#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;
}
易错点,如果直接double ans=m/h*h;结果会出问题,正确的应该是:double ans=m/(h * h);
#include<bits/stdc++.h>
#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;
}
- c++直接使用sort函数排序
- c语言可以使用qsort函数排序
#include<bits/stdc++.h>
#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;
}
单独考虑一下闰年和非闰年
然后一般情况下月份的天数都是固定的,可以直接用数组存储,方便直接输出
#include<bits/stdc++.h>
#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;
}
用maxx记录最不高兴的程度,如果当天不高兴的程度大于之前的,更新maxx,同时记录一下星期几d
#include<bits/stdc++.h>
#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;
}
和第二题大同小异,思想差不多,就是看能不能整除,不能的话就需要多买一个,分三种情况讨论,把每次买的价格和ans(存储最低的价格)比较,如果小于ans就更新ans,否则不变
#include<bits/stdc++.h>
#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;
}
将三条边排个序,然后根据边的关系判断是哪种三角形,注意一下什么时候用单分支判断什么时候用多分支判断就行
#include<bits/stdc++.h>
#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;
}
分情况讨论即可
#include<bits/stdc++.h>
#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;
}
注意点:需要开long long,因为n的数据量很大,用int会炸
思路就是暴力循环,模拟遍历一遍就可以了
#include<bits/stdc++.h>
#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;
}
最小锐角的正弦值是用最短的边/最长的边,因此先将三个边排个序,然后就是约分,约分前需要求一下最大公约数,两个数除一下就化成最简的了
#include<bits/stdc++.h>
#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;
}
直接求出能够摘到的最大高度,小于等于这个高度的都能摘到
#include<bits/stdc++.h>
#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;
}
思路:s数组用来存储三个数,并排序,下标从0 ~ 2也分别对应着A ~ C,
v是一个字符串,用来存储输出的顺序,利用ASCII表的关系,将字符转化为对应的下标
#include<bits/stdc++.h>
#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;
}
考察字符型和整形之间的转换
不能直接用字符型中的数字和整形进行比较,需要将字符型转化为整形
#include<bits/stdc++.h>
#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;
}