NOIP 2011普及组复赛(习题+源程序)
N O I P2011普及组复赛1.数字反转(c/pas)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。
新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。
(参见样例2)【输入】输入文件名为。
输入共一行,一个整数N。
【输出】输出文件名为。
输出共1行,一个整数,表示反转后的新数。
-1,000,000,000≤N≤1,000,000,000。
【解题】这道题非常简单,可以读字符串处理,也可以读数字来处理,只不过要注意符号问题(以及-0,但测试数据没出)。
【法一】字符串处理Vari,l,k:integer;s:string;p:boolean;beginassign(input,'');reset(input);assign(output,'');rewrite(output);readln(s);l:=length(s);k:=1;ifs[1]='-'thenbeginwrite('-');k:=2;end;p:=true;;fori:=ldowntokdobeginif(p)and((s[i]='0'))thencontinueelsebeginwrite(s[i]);p:=false;;end;end;close(input);close(output);end.【法二】数字处理Varf:integer;n,ans:longint;beginassign(input,'');reset(input);assign(output,'');rewrite(output);readln(n);ifn<0thenbeginf:=-1;n:=-n;endelsef:=1;ans:=0;whilen<>0dobeginans:=ans*10+nmod10;n:=ndiv10;end;ans:=ans*f;writeln(ans);close(input);close(output);end.2.统计单词数c/cpp)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。
注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)【输入】输入文件名为,2行。
第1行为一个字符串,其中只含字母,表示给定单词;第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
【输出】输出文件名为。
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。
输出结果表示给定的单词To在文章中出现两次,第一次出现的位置为0。
表示给定的单词to在文章中没有出现,输出整数-1。
【数据范围】1≤单词长度≤10。
1≤文章长度≤1,000,000。
【解题】这道题也不是很难,programstat;varI,n,p:longint;s,s1:string;c:char;beginassign(input,'');reset(input);assign(output,'');rewrite(output);readln(s);s:=upcase(s);3.瑞士轮c/pas)【背景】在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。
前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。
后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。
本题中介绍的瑞士轮赛制,因最早使用于1895年在瑞士举办的国际象棋比赛而得名。
它可以看作是淘汰赛与循环赛的折衷,既保证了比赛的稳定性,又能使赛程不至于过长。
【问题描述】2*N名编号为1~2N的选手共进行R轮比赛。
每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。
选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。
总分相同的,约定编号较小的选手排名靠前。
每轮比赛的对阵安排与该轮比赛开始前的排名有关:第1名和第2名、第3名和第4名、……、第2K–1名和第2K名、……、第2N–1名和第2N名,各进行一场比赛。
每场比赛胜者得1分,负者得0分。
也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。
现给定每个选手的初始分数及其实力值,试计算在R轮比赛过后,排名第Q的选手编号是多少。
我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。
【输入】输入文件名为。
输入的第一行是三个正整数N、R、Q,每两个数之间用一个空格隔开,表示有2*N名选手、R轮比赛,以及我们关心的名次Q。
第二行是2*N个非负整数s1,s2,…,s2N,每两个数之间用一个空格隔开,其中s i表示编号为i的选手的初始分数。
第三行是2*N个正整数w1,w2,…,w2N,每两个数之间用一个空格隔开,其中w i表示编号为i的选手的实力值。
【输出】输出文件名为。
输出只有一行,包含一个整数,即R轮比赛结束后,排名第Q的选手的编号。
对于30%的数据,1≤N≤100;对于50%的数据,1≤N≤10,000;对于100%的数据,1≤N≤100,000,1≤R≤50,1≤Q≤2N,0≤s1,s2,…,s2N≤810,1≤w1,w2,…,w2N≤810。
【解题】题目虽然长,但理解题意后就发现解题的瓶颈在于排序。
如果每一轮比赛的结果都进行快速排序,时间复杂度为O(Rlongn),但事实证明这样只能拿60分。
如何AC,这需要一个巧算法:分析得知,快速排序实际上进行了许多无用的工作:如果两个人在第i轮都赢了,那么第i轮后的先后关系与第i-1轮是一样的;反之,如果两人都输了,他们的先后关系也不会变。
所以,我们有一个新算法:一开始做一趟快速排序,然后对于每一轮,将此轮的n个赢者(他们的先后关系和上一轮不变)和n个输者(他们的先后关系和上一轮也不变分开,然后就是归并,于是时间复杂度O(Rn))(实践证明,如果单纯的排序r次,必然结果是超时。
事实上只需一次真正意义上的排序以后,在以后的比赛中,按原顺序分成两组,获胜组和失败组,这两组依然是有序的,再把这两组归并成一组,就可以了。
总时间复杂度O(N*R))programswiss;vara,b,v:array[1..200000]oflongint;c,d:array[1..100000,1..2]oflongint;n,r,q,i,j:longint;procedureqsort(l,r:longint);vari,j,mid1,mid2,t:longint;begini:=l;j:=r;mid1:=a[(l+r)div2];mid2:=v[(l+r)div2];repeat4.表达式的值c/pas)【问题描述】1.先计算括号内的,再计算括号外的。
2.“×”运算优先于“⊕”运算,即计算表达式时,先计算×运算,再计算⊕运算。
例如:计算表达式A⊕B×C时,先计算B×C,其结果再与A做⊕运算。
现给定一个未完成的表达式,例如_+(_*_),请你在横线处填入数字0或者1,请问有多少种填法可以使得表达式的值为0。
【输入】输入文件名为,共2行。
第1行为一个整数L,表示给定的表达式中除去横线外的运算符和括号的个数。
第2行为一个字符串包含L个字符,其中只包含’(’、’)’、’+’、’*’这4种字符,其中’(’、’)’是左右括号,’+’、’*’分别表示前面定义的运算符“⊕”和“×”。
这行字符按顺序给出了给定表达式中除去变量外的运算符和括号。
【输出】输出文件共1行。
包含一个整数,即所有的方案数。
注意:这个数可能会很大,请输出方案数对10007取模后的结果。
给定的表达式包括横线字符之后为:_+(_*_)在横线位置填入(0、0、0)、(0、1、0)、(0、0、1)时,表达式的值均为0,所以共有3种填法。
【数据范围】对于20%的数据有0≤L≤10。
对于50%的数据有0≤L≤1,000。
对于70%的数据有0≤L≤10,000。
对于100%的数据有0≤L≤100,000。
对于50%的数据输入表达式中不含括号。
【解题】算法类似于表达式计算,一个符号栈,两个数据栈。
记f(s,0)表示表达式s为0的方案数,f(s,1)表示表达式s为1的方案数。
f(a+b,0)=f(a,0)*f(b,0)f(a+b,1)=f(a,0)*f(b,0)+f(a,0)*f(b,1)+f(a,1)*f(b,0)f(a*b,0)=f(a,0)*f(b,0)+f(a,1)*f(b,0)+f(a,0)*f(b,1)f(a*b,1)=f(a,1)*f(b,1)programexp;constmaxn=100010;op:array[1..4]ofchar=('(','+','*',')');flag:array[1..4,1..4]ofchar=({(}('<','<','<','='),{+}('<','>','<','>'),{*}('<','>','>','>'),{)}('>','>','>','>'));maxn]ofchar;stack_data0,stack_data1:array[1..maxn]oflongint;n,top_op,top_data,i,len:longint;a0,a1,b0,b1,t0,t1:longint;s:ansistring;ch,now:char;procedurepush_op(ch:char);。
prob水题专练
NOIP普及组复赛模拟赛试卷普及组(请选手务必仔细阅读本页内容)【输入格式】1行,有两个用空格隔开的整数n,m(3≤n≤30,1≤m≤30)。
【输出格式】一个整数,表示符合题意的方法数。
【输入样例】3 3【输出样例】2【数据规模】对于40%的数据:3≤n≤30;1≤m≤20;对于100%的数据:3≤n≤30;1≤m≤30;维修栅栏(fence.pas/c/cpp)【问题描述】农场的栅栏年久失修,出现了多处破损,晶晶准备维修它,栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损坏。
晶晶知道,维修连续m个木板(这m个木板不一定都是损坏的)的费用是sqrt(m)。
可是,怎样设计方案才能使总费用最低呢?请你也来帮帮忙。
【输入格式】第1行包含一个整数n(n≤2500),表示栅栏的长度;第2行包含n个由空格分开的整数(长整型范围内)。
如果第i个数字是0,则表示第i块木板已经损坏,否则表示没有损坏。
【输出格式】仅包含一个实数,表示最小维修费用;注意:答案精确到小数点后3位。
【输入样例】90 -1 0 1 2 3 0 -2 0【输出样例】3.000fstring 字符串(fstring.pas/c/cpp)【问题描述】一个只包含A,B,C三种字符的字符串,如果其中有连续的3个由A,B,C各一个组成的子串,则称这个字符串为fstring字符串。
例如:BAACAACCBAAA就是一个fstring字符串,而AABBCCAABB则不是。
你的任务是计算只包含A,B,C三种字符且长度为n的这种字符串有多少个不是fstring字符串。
【输入格式】一个整数n(l≤n≤30)。
【输出格式】一个整数。
【输入样例1】2【输出样例1】9【输入样例2】3【输出样例2】21款待奶牛(treat.pas/c/cpp)【问题描述】FJ有n(1≤n≤2000)个美味的食物,他想卖掉它们来赚钱给奶牛。
这些食物放在一些箱子里,它们有些有趣的特性:(1)这些食物被编号为1~n,每一天FJ可以从这排箱子的头部或者尾部取出食物去卖;(2)这些食物放得越久,年龄越大,价值越大,食物i有一个初始的价值V(i);(3)放了a天后,年龄为a,食物最终的价值为V(i)×a。
NOIP2011普及组复赛(精彩试题+源程序)
NOIP2011 普及组复赛1.数字反转(reverse.cpp/c/pas)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。
新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。
(参见样例2)【输入】输入文件名为reverse.in。
输入共一行,一个整数N。
【输出】输出文件名为reverse.out。
输出共1行,一个整数,表示反转后的新数。
-1,000,000,000≤N≤1,000,000,000。
【解题】这道题非常简单,可以读字符串处理,也可以读数字来处理,只不过要注意符号问题(以及-0,但测试数据没出)。
【法一】字符串处理Var i,l,k:integer;s:string;p:boolean;beginassign(input, 'reverse.in'); reset(input);assign(output, 'reverse.out'); rewrite(output);readln(s);l:=length(s);k:=1;if s[1]='-' thenbeginwrite('-');k:=2;end;p:=true;;for i:=l downto k dobeginif(p)and((s[i]='0')) then continueelsebeginwrite(s[i]);p:=false;;end;end;close(input); close(output);end.【法二】数字处理Var f:integer;n,ans:longint;beginassign(input, 'reverse.in'); reset(input);assign(output, 'reverse.out'); rewrite(output);readln(n);if n<0 thenbeginf:=-1;n:=-n;endelsef:=1;ans:=0;while n<>0 dobeginans:=ans*10+n mod 10;n:=n div 10;end;ans:=ans*f;writeln(ans);close(input); close(output);end.2.统计单词数(stat.pas/c/cpp)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
noip普及组复赛入门训练11(答案)
PASCAL复习111.文本图形(文件名WBTX.PAS)【问题描述】已知两个数的最大公约数是x,最小公倍数是y.共有多少对数满足?输入x,y,输出每一对数和满足的总对数.输入:6 36输出:6 3612182(共2组)输入:12 64输出:0(没有符合条件的数)Var x,y,a,b,c,t,i1,i2:longint;Beginreadln(x,y); t:=0;for i1:=x to y-1 dofor i2:=i1+1 to y do begina:=i1; b:=i2;repeatc:=a mod b;a:=b;b:=c;until b=0;b:=i1*i2 div a;if (a=x) and (b=y)then begin t:=t+1; writeln(i1:8,i2:8); end;end;writeln(t);readln;End.2. NICOMACHUS定理(文件名NCMC.PAS)【问题描述】NICOMACHUS定理:任何一个整数的立方都可以表示成一串奇数的和,例如:13=1=1,23=3+5=8,33=7+9+11=27,43=13+15+17+19=64,输入任一整数n,输出这一整数的立方与一串奇数的和。
输入输出样例:输入:n=4输出:64=13+15+17+19Var n,m,i,j,s,k,t:longint;Beginwrite(‘n=‘);readln(n);m:=n*n*n;i:=-1;repeati:=i+2;j:=i; s:=0; t:=0;repeats:=s+j; t:=t+1;j:=j+2;until t=n;until (s=m);write(m,’=‘,i);for k:=i+2 to j-2 doif k mod 2=1 then write(‘+’,k);writeln;readln;End.或i:=n*(n-1)+1;Write(n*n*n,’=‘,i);For j:=2 to n do begini:=i+2;write(‘+’,i);end;3.费马命题(文件名FMMT.PAS)费马命题是:一个素数,若被4除余1,则它能表示成两个数的平方和。
noip普及组复赛试题及答案
noip普及组复赛试题及答案一、选择题1. 在计算机科学中,以下哪个概念与数据结构最相关?A. 算法B. 操作系统C. 网络协议D. 编译原理答案:A2. 以下哪种排序算法的时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 堆排序D. 冒泡排序答案:D3. 在C++中,以下哪个关键字用于定义类?A. structB. unionC. enumD. typedef答案:A4. 以下哪个选项不是数据库管理系统(DBMS)的特性?A. 数据持久性B. 数据共享C. 数据加密D. 数据独立性答案:C5. 在计算机网络中,TCP和UDP协议分别属于哪一层?A. 传输层B. 应用层C. 网络层D. 物理层答案:A二、填空题1. 在计算机程序中,______ 用于定义数据的存储方式和组织形式。
答案:数据结构2. 一个算法的时间复杂度为O(1),表示该算法的执行时间与输入数据的规模______。
答案:无关3. 在C++中,______ 是一种特殊的类,它提供了一种方式来定义数据类型。
答案:typedef4. 数据库管理系统(DBMS)通常包含数据定义语言(DDL)、数据操纵语言(DML)和______。
答案:数据控制语言(DCL)5. 在计算机网络中,______ 协议负责在网络层进行数据包的路由选择。
答案:IP三、简答题1. 请简述面向对象编程(OOP)的三个基本特征。
答案:封装、继承、多态2. 描述二分查找算法的基本步骤。
答案:二分查找算法的基本步骤包括:首先确定数组是有序的,然后取中间元素与目标值比较,如果中间元素等于目标值,则查找成功;如果目标值小于中间元素,则在左半部分继续查找;如果目标值大于中间元素,则在右半部分继续查找,直到找到目标值或查找范围为空。
四、编程题1. 编写一个函数,实现对整数数组的排序。
答案:以下是一个简单的冒泡排序算法实现:```cppvoid bubbleSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {for (int j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {swap(arr[j], arr[j+1]);}}}}```2. 编写一个函数,实现计算一个整数的阶乘。
最新NOIP复赛普及组试题资料
全国信息学奥林匹克联赛(NOIP2011)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况二.提交源程序文件名三.编译命令(不包含任何优化开关)四.运行内存限制注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU P4 3.0GHz,内存1G,上述时限以此配置为准。
4、特别提醒:评测在NOI Linux 下进行。
1.数字反转(reverse.cpp/c/pas)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。
新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
【输入】输入文件名为reverse.in。
输入共1 行,一个整数N。
【输出】输出文件名为reverse.out。
输出共1 行,一个整数,表示反转后的新数。
【输入输出样例1】【输入输出样例2】【数据范围】-1,000,000,000 ≤ N ≤ 1,000,000,000。
2.统计单词数(stat.cpp/c/pas)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。
注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。
【输入】输入文件名为stat.in,2 行。
第1 行为一个字符串,其中只含字母,表示给定单词;第2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
【输出】输出文件名为stat.out。
历年noip普及组(c++)完善程序题总结归纳
完善程序题总结归纳By:七(6) yx一、【题目】(哥德巴赫猜想)哥德巴赫猜想是指,任一大于2的偶数都可写成两个质数之和。
迄今为止,这仍然是一个著名的世界难题,被誉为数学王冠上的明珠。
试编写程序,验证任一大于2且不超过n的偶数都能写成两个质数之和。
#include<iostream>using namespace std;int main(){const int SIZE=1000;int n,r,p[SIZE],i,j,k,ans;bool tmp;cin>>n;r=1;p[1]=2;for(i=3;i<=n;i++){①;for(j=1;j<=r;j++)if(i% ②==0){tmp=false;break;}if(tmp){r++;③;}}ans=0;for(i=2;i<=n/2;i++){tmp=false;for(j=1;j<=r;j++)for(k=j;k<=r;k++)if(i+i== ④ ){tmp=true;break;}if(tmp)ans++;}cout<<ans<<endl;return 0;}若输入n为2010,则输出⑤时表示验证成功,即大于2且不超过2010的偶数都满足哥德巴赫猜想。
【算法】先for一遍,找出质数,然后对每一个偶数进行一一匹配(2除外),效率O(n^3)【代码】1、tmp=1;2、p[j];3、p[r]=j;4、p[j]+p[k]5、1004【年份】2010年二、【题目】(过河问题) 在一个月黑风高的夜晚,有一群人在河的右岸,想通过唯一的一根独木桥走到河的左岸.在伸手不见五指的黑夜里,过桥时必须借照灯光来照明,不幸的是,他们只有一盏灯.另外,独木桥上最多能承受两个人同时经过,否则将会坍塌.每个人单独过独木桥都需要一定的时间,不同的人要的时间可能不同.两个人一起过独木桥时,由于只有一盏灯,所以需要的时间是较慢的那个人单独过桥所花费的时间.现在输入N(2<=N<1000)和这N个人单独过桥需要的时间,请计算总共最少需要多少时间,他们才能全部到达河左岸.例如,有3个人甲、乙、丙,他们单独过桥的时间分别为1、2、4,则总共最少需要的时间为7.具体方法是:甲、乙一起过桥到河的左岸,甲单独回到河的右岸将灯带回,然后甲、丙在一起过桥到河的左岸,总时间为2+1+4=7.#include<iostream>#include<cstring>using namespace std;const int size=100;const int infinity = 10000;const bool left=1;const bool right =0;const bool left_to_right=1;const bool right_to_left=0;int n,hour[size];bool pos[size];int max(int a,int b){return a>b?a:b;}int go(bool stage){int i,j,num,tmp,ans;if(stage==right_to_left){num=0;ans=0;for(i=1;i<=n;i++)if(pos[i]==right){num++;if( hour[i]>ans)ans=hour[i];}if( ① )return ans;ans=infinity;for(i=1;i<=n-1;i++)if(pos[i]==right)for(j=i+1;j<=n;j++)if(pos[j]==right){pos[i]=left;pos[j]=left;tmp=max(hour[i],hour[j])+ ②; if(tmp<ans)ans=tmp;pos[i]=right;pos[j]=right;}return ans;}if(stage==left_to_right){ans=infinity;for(i=1;i<=n;i++)if( ③ ){pos[i]=right;tmp= ④ ;if(tmp<ans)ans=tmp;⑤;}return ans;}return 0;}int main(){int i;cin>>n;for(i=1;i<=n;i++){cin>>hour[i];pos[i]=right;}cout<<go[right_to_left)<<endl;return 0;}【算法】利用深搜,左右交替寻找最优解(maybe是动态规划)【代码】1、num<=2;2、go[1];3、pos[j]==1;4、hour[i]+go[0];5、pos[i]=1;【年份】2010年三、【题目】(子矩阵)给输入一个n1*m1的矩阵a,和n2*m2的矩阵b,问a中是否存在子矩阵和b相等。
noip普及组复赛入门测试(答案+测试数据)
一、新龟兔赛跑(文件名xgtsp.pas)新龟兔赛跑比赛即将举行,此次龟兔赛跑比赛的规则与以往有所不同,不再考察兔子和乌龟谁在最短的时间内跑完规定的路程,而是考察谁在规定时间内跑的路程更长,且兔子和乌龟跑步都是匀速的。
由于兔子的坏习惯,它总喜欢把比赛的总时间T小时中的K小时拿来睡觉。
现在给你比赛的总时间T、兔子的睡觉时间K、兔子的速度U、乌龟的速度V,需要你求出该次比赛谁最后获胜。
输入第一行为一个整数X,表示有X组输入数据。
每组数据只有一行,包括4个数T、K、U、V (1 ≤ T≤ 300,0 ≤ K ≤ T,1 ≤ U ≤ 100,1 ≤ V ≤ 100)。
对于每组数据,输出只有一个数,如果兔子获胜则输出-1,如果乌龟获胜则输出1,如果同时到达则输出0。
允许输入一组数后立即输出对应的结果。
样例输入:21 12 16 2 6 3样例输出:1-1varv,u,t,k,n,i:integer;beginreadln(n);for i:=1 to n do beginreadln(t,k,u,v);if v*t>U*(t-k) then writeln(1);if v*t<U*(t-k) then writeln(-1);if v*t=U*(t-k) then writeln(0);end;end.1、输入:26 2 6 28 6 8 2输出:-12、输入:2300 280 60 20120 0 12 13输出:113、输入:3100 20 50 30100 50 45 25100 80 27 17输出:-1114、输入:3150 77 29 23127 11 22 13139 22 13 7输出:1-1-1二、小球路程(文件名:XQLC.PAS )已知小球从100米高度自由下落,落地后反弹起,又落地,又弹起,……。
每次弹起的高度都是上一次高度的一半。
求小球第N次反弹起的高度和球在整个过程所经过的路程(包括下落和反弹),用键盘输入N,输出反弹高度和经过路程,结果保留两位小数。
第十一届全国青少年奥林匹克信息学联赛复赛普及组试题
第十一届全国青少年奥林匹克信息学联赛复赛普及组试题及答案陶陶摘苹果(apple.pas/c/cpp)【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。
苹果成熟的时候,陶陶就会跑去摘苹果。
陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。
假设她碰到苹果,苹果就会掉下来。
【输入文件】输入文件apple.in包括两行数据。
第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。
第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
【输出文件】输出文件apple.out包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
【样例输入】100 200 150 140 129 134 167 198 200 111110【样例输出】5[参考程序]题目讲解:简单的循环和文件操作的考察,和去年“不高兴的晶晶”有相似之处,但是比那一道题目简单。
program apple(input,output);varapp:array[1..10] of integer;f1,f2:text;i,j,n:integer;beginassign(f1,'apple.in');assign(f2,'apple.out');reset(f1);rewrite(f2);for i:=1 to 10 do read(f1,app);read(f1,n);j:=0;for i:=1 to 10 doif app<=n+30 then j:=j+1;writeln(f2,j);close(f1);close(f2);end.校门外的树(tree.pas/c/cpp)【问题描述】某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。
NOIP复赛普及组试题
CCF 全国信息学奥林匹克联赛(NOIP2015)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况二.提交源程序文件名三.编译命令(不包含任何优化开关)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,2.8GHz,内存4G,上述时限以此配置为准。
4、只提供Linux 格式附加样例文件。
5、特别提醒:评测在当前最新公布的NOI Linux 下进行,各语言的编译器版本以其为准。
1. 金币(coin.cpp/c/pas)国王将金币作为工资,发放给忠诚的骑士。
第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N 天每天收到N 枚金币后,骑士会在之后的连续N+1 天里,每天收到N+1 枚金币。
请计算在前K 天里,骑士一共获得了多少金币。
【输入格式】输入文件名为coin.in。
输入文件只有1 行,包含一个正整数K,表示发放金币的天数。
【输出格式】输出文件名为coin.out。
输出文件只有1 行,包含一个正整数,即骑士收到的金币数。
【输入输出样例1】【输入输出样例1 说明】骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。
因此一共收到1+2+2+3+3+3=14 枚金币。
【输入输出样例2】【数据说明】对于100%的数据,1 ≤ K ≤ 10,000。
2.扫雷游戏(mine.cpp/c/pas)扫雷游戏是一款十分经典的单机小游戏。
在n 行m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。
2000-2011NOIP普及组试题
【00NOIP普及组】计算器的改良(noip001.pas)【题目描述】NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。
实验室将这个任务交给了一个刚进入的新手ZL 先生。
为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:4+3x=86a-5+1=2-2a-5+12Y=0ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及十、一、=这三个数学符号(当然,符号“一”既可作减号,也可作负号)。
方程中并没有括号,也没有除号,方程中的字母表示未知数。
【输入】输入一个一元一次方程,可认为输入的一元一次方程均为合法的,且有唯一实数解。
【输出】将解方程的结果(精确至小数点后三位)输出。
【输入样例】6a-5+1=2-2a【输出样例】a=0.750【00NOIP普及组】税收与补贴问题(noip002.pas)【题目描述】每样商品的价格越低,其销量就会相应增大。
现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递减。
(我们假设价格及销售量都是整数)对于某些特殊商品,不可能完全由市场去调节其价格。
这时候就需要政府以税收或补贴的方式来控制。
(所谓税收或补贴就是对于每个产品收取或给予生产厂家固定金额的货币)问题求解:你是某家咨询公司的项目经理,现在你已经知道政府对某种商品的预期价格,以及在各种价位上的销售情况。
要求你确定政府对此商品是应收税还是补贴的最少金额(也为整数),才能使商家在这样一种政府预期的价格上,获取相对其他价位上的最大总利润。
总利润=单位商品利润*销量单位商品利润=单位商品价格-单位商品成本(-税金 or +补贴)【输入】输入的第一行为政府对某种商品的预期价,第二行有两个整数,第一个整数为商品成本,第二个整数为以成本价销售时的销售量,以下若干行每行都有两个整数,第一个为某价位时的单价,第二个为此时的销量,以一行-1,-1表示所有已知价位及对应的销量输入完毕,输入的最后一行为一个单独的整数表示在已知的最高单价外每升高一块钱将减少的销量。
