『Luogu OJ』『C++』Level 1-4 数组
关卡1-4,5道题
数组
任务说明:跟数组有关的题目基本上都要用到循环,所以请先完成1-3。
要完成这个任务,请将以下的题目都AC掉(即通过这道题目):
1.陶陶摘苹果 P1046
2.校门外的树 P1047
3.小鱼的数字游戏 P1427
4.小鱼比可爱 P1428
5.不高兴的津津(升级版) P1534
练习要循序渐进,不能急于求成哦! 当然洛谷也允许在一定条件下跳过某些关卡。最多可以跳过3次。
成就达成时间:2015-07-16 19:19
1.陶陶摘苹果 P1046
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式:
输入文件apple.in包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式:
输出文件apple.out包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
依旧是PJ第一题小水题。
没什么好过多解释的
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int apple[9]; 6 for (int i=0;i<=9;++i) cin>>apple[i]; 7 int Taotao; 8 cin>>Taotao; 9 Taotao+=30; 10 int Ans=0; 11 for (int i=0;i<=9;++i) if (apple[i]<=Taotao) ++Ans; 12 cout<<Ans<<endl; 13 return 0; 14 }
2.校门外的树 P1047
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入格式:
输入文件tree.in的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
输出格式:
输出文件tree.out包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int L,M; 6 int Tree[10000]; 7 cin>>L>>M; 8 int l,r; 9 int Ans=0; 10 for (int i=0;i<=L;++i) Tree[i]=1; 11 for (int i=1;i<=M;++i) 12 { 13 cin>>l>>r; 14 for (int j=l;j<=r;++j) Tree[j]=0; 15 } 16 for (int i=0;i<=L;++i) if (Tree[i]==1) ++Ans; 17 cout<<Ans<<endl; 18 return 0; 19 }
很自然的想法,把覆盖的区间染色,数据很小,所以空间可以支撑。
计算太麻烦了,有兴趣的可以自己算算。
3.小鱼的数字游戏 P1427
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入格式:
一行内输入一串整数,以0结束,以空格间隔。
输出格式:
一行内倒着输出这一串整数,以空格间隔。
说实话一开始我看错题了……我以为是数字反转念,又去搞字符串和eof了……
然后一看原来是超水题。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int Num[100]; 6 int a=1; 7 int n=0; 8 while (a!=0) 9 { 10 cin>>a; 11 Num[n]=a; 12 ++n; 13 } 14 for (int i=n-2;i>=1;i--) 15 cout<<Num[i]<<' '; 16 cout<<Num[0]<<endl; 17 return 0; 18 } 19
4.小鱼比可爱 P1428
人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度都不一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。
输入格式:
第一行输入一个整数n,表示鱼的数目。
第二行内输入n个整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度。
输出格式:
行内输出n个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。
这个犹豫了一下要不要写个判断、最后还是懒,算法什么鬼以后再说吧。
这一段时间都是弱智模拟秒写……
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int n; 6 cin>>n; 7 int Fish[100],Cute[100]; 8 for (int i=1;i<=n;++i) 9 { 10 cin>>Cute[i]; 11 Fish[i]=0; 12 } 13 for (int i=1;i<=n;++i) 14 for (int j=1;j<i;++j) 15 if (Cute[j]<Cute[i]) ++Fish[i]; 16 for (int i=1;i<n;++i) cout<<Fish[i]<<' '; 17 cout<<Fish[n]; 18 return 0; 19 } 20
5.不高兴的津津(升级版) P1534
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每天妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。
这次与NOIp2004普及组第一题不同的是:假设津津不会因为其它事不高兴,但是她的不高兴会持续到第二天。请你帮忙检查一下津津以后n天的日程安排,看看以后n天她会不会不高兴(计算方法:用昨天不高兴程度加上今天上课总时间减去8后得到的数作为今天不高兴程度);输出以后n天结束后不高兴程度和是多少。
输入格式:
第1行:一个数n
第2行~第n+1行:每行两个数,表示这天上学时间和课外补习班时间
输出格式:
一个数,这n天过后的不高兴程度和
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int n; 6 cin>>n; 7 int School,After_School,Unhappy,UnHAPPY=0; 8 for (int i=1;i<=n;++i) 9 { 10 cin>>School>>After_School; 11 //if (School+After_School>8) 12 Unhappy=Unhappy+School+After_School-8; 13 UnHAPPY+=Unhappy; 14 } 15 cout<<UnHAPPY<<endl; 16 return 0; 17 } 18
代码先贴上。
说实话我个人对这个题目描述感觉乱七八糟的。//拿大小写敏感随手提醒下Pascal选手如何抄代码(我就被坑过……)
现在仔细看看。
其实是被不高兴的津津那道题拐走了
(计算方法:用昨天不高兴程度加上今天上课总时间减去8后得到的数作为今天不高兴程度)
这句话是本题的要求
而第一段就是个坑。
感觉是出题人硬想跟NOIp原题变式,但跟原题的高兴不高兴本来没关系。
就这样。
不要考虑今天只有5是不是就高兴了。
就拿式字算即可。