题目链接
给你一个整数n(笔记本的数量),接下来n行每行两个Mi,Si(表示内存和速度)。
问被完虐的笔记本数。(完虐即内存和速度都不高于另外某一个笔记本)。
1. 首先笔记本的内存和速度一般是多个,所以可以使用数组进行读入
2. 然后判断是否完虐即Mi<=Mj并且Si<=Sj并且j不等于i的时候,属于完虐
3. 属于完虐则进行计数,最后输出数量
完虐的定义是都不高于是包括等于的情况的
#include
int main()
{int n;//笔记本的数量 int m[100010],s[100010];//m数组表示内存,s数组表示速度,n的范围是10^5,所以开大一点 int cnt=0;//用于记录属于完虐的数量 scanf("%d",&n);for(int i=1;i<=n;i++)//利用for循环读入内存和速度 {scanf("%d %d",&m[i],&s[i]);}for(int i=1;i<=n;i++)//利用两层for,遍历判断 {for(int j=1;j<=n;j++){if(m[i]<=m[j]&&s[i]<=s[j]&&j!=i)//属于完虐的情况 {cnt++;//数量+1 break;//停止,为了避免 i 和 j 相同 加重复 }}}printf("%d",cnt);//输出数量 return 0;
}
难度简单,细心点问题不大
题目链接
输入一个整数n,让你计算S=1!+2!+3!+…+N!的值,输出S
1.首先要知道阶乘是什么(阶乘也就是连乘,1的阶乘是1,二的阶乘是1*2=2,3的阶乘是1*2*3=6)
2.而题目让求的是阶乘的和(也就是每个的阶乘相加)
3.最后输出和
无
#include
int main()
{int n;scanf("%d",&n);int sum=0;//记录阶乘和 int cnt=1;//为了便于后边的阶乘 for(int i=1;i<=n;i++){cnt*=i;//每个的阶乘 sum+=cnt;//阶乘相加 }printf("%d",sum); //输出总和 return 0;
}
难度简单,一定要读清题目
题目链接
给你三个整数a,b,c.让你输出其中的最大值和最小值
1.定义一个最大值和最小值的变量,并将其中的一个值赋给最大值和最小值
2.然后用其余的两个跟最大值和最小值进行比较,如果大或者小,则进行最大值和最小值
3.最后输出最大值和最小值
注意格式,输出最大值后需要换行
#include
int main()
{int a,b,c;scanf("%d %d %d",&a,&b,&c); int max=a,min=a;//max表示最大值,min表示最小值,并将a赋给他们 if(b>max)//b比最大值大 {max=b;//更新 max 的值,将 b 赋给 max }if(c>max)//c比最大值大 {max=c;//更新 max ,将 c 赋给 max }if(b
难度简单,注意格式
题目链接
给你一个整数l表示马路长度和一个整数m表示区域的数量,和m个区域的范围(起始点和终止点),区间之间可能有重合的部分,现要将区域的树移走(包括两个端点的树)问马路上剩余的树的树量
1.首先遍历m次,读入区域范围,并进行标记
2.遍历马路的长度,若值未改变则表示未被移走,计数++
3.最后输出数量
马路的长度是从0开始的,而不是从1开始
#include
int main()
{int l,m;int x,y;//区域的起始点x,终止点y int a[10010]={0};//将数组的值都赋值为0 scanf("%d %d",&l,&m);for(int i=1;i<=m;i++)//m个区域,遍历m次 {scanf("%d %d",&x,&y);for(int j=x;j<=y;j++)//再次利用for 循环遍历区域的范围,并标记为1 表示这些树被移走了 {a[j]=1;}}int ans=0;//记录剩下的树的数量 for(int i=0;i<=l;i++)//遍历马路长度,是从0开始的而不是1 {if(a[i]==0)//如果该位置值为 0,也就是未被移走 {ans++;//计数+1 }}printf("%d",ans);//输出未被移走的数量 return 0;
}
难度稍难,不容易被想到,要多思考