1、-_NOIP 初赛模拟试题 by OI Store (提高组 C+语言 二小时完成) 一、单项选择题(共 10 题,每题 1.5 分,共计 15 分。每题有且仅有一个正确答案。) 1. 建立了计算机最主要的结构原理的人是( )。A. 图灵 B. 比尔盖茨 C. 冯 诺伊曼 D. 克拉拉丹 E. 哥德尔 2. 设 a、b、c 是三个布尔型(boolean) 的变量,则表达式(ab)(bc)(ca)(a a)(bb)的值( )。A. 始终为 trueB. 始终为 falseC. 当且仅当 c 为 true 时为 falseD. 当且仅当 a 与 b 均为 true 时为 trueE. 依赖于 a、
2、b、c 三者的值 3. 设 a、b 为两个浮点(float)型变量,下面的表达式中最有可能为真的是( )。A. a=bB. a*a+2*a*b+b*b=(a+b)*(a+b)C. (a+b)*(a-b)+b*b-a*a3*S(3)+2*S(2)-1C. S(0)2*S(3)+S(2)E. S(0)#includeusing namespace std;int main()int a,b,c,i,s300;cinabc;s0=a;s1=b;for (i=2;i#includeusing namespace std;void get()char c;cinc;if (c!=!) get();cou
3、t#includeusing namespace std;double f(double d)-_return 1.0/(1-d);int main()double a;int b,i;cinab;for (i=b;i=1;i-)a=f(a);printf(“%.1fn“,a);return 0;输入: 0.5 1000输出:26.程序:#include#includeusing namespace std;int s100,ii,i,j,n,swap;bool r;void swp(int i,int j)int tmp;tmp=si;si=sj;sj=tmp;void rev(int i,
4、int j)while (in;for (i=0;isi;i=n-1;while (true) ii=i;i-;if (si=sj);swp(i,j);rev(ii,n-1);break;for(i=0;i#include#include#include#includeusing namespace std;int s100,t100,a,b,g,i,j,d;int gcd(int a,int b)if (b=0) return a;else _(1)_;void work(int a,int b)i=0;-_d=1;while (true)if (a=0) break;a*=10;ti=a;
5、si=a / b;a=a % b;for (j=0;jab;if (ab) g=gcd(a,b);else _(4)_;a/=g;b/=g;_(5)_;a%=b;work(a,b);return 0;28.题目描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n-1 次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每
6、个果子重量都为 1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。例如有 3 种果子,数目依次为 1,2 ,9。可以先将 1、2 堆合并,新堆数目为 3,耗费体力为 3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12,耗费体力为 12。所以多多总共耗费体力=3+12=15。可以证明 15 为最小的体力耗费值。输入:输入包括两行,第一行是一个整数 n(1#includeusing namespace std;int s115000,s215000,s1Low,s1hi,s2Low,s2hi,r,L,s,x,i,
7、min1,min2;int peeksmall()min1=1000000000;min2=1000000000;if(s1Low!=s1hi) min1=s1s1Low;if (s2Low!=s2hi) min2=s2s2Low;if (_(1)_) return s1s1Low+;else return s2s2Low+;void swap(int L,int r)int tmp;tmp=s1r;s1r=s1L;s1L=tmp;void sort(int Low,int hi)int L;if (Low=hi) _(2)_;else x=s1(Low+hi) / 2;swap(Low,_(3)_);L=Low;r=hi;while (L=x) r-;s1L=s1r;while (Ls1hi;for (i=0;is1i;sort(0,_(5)_);s=0;for (i=s1hi-1;i=1;i-)s2s2hi=peeksmall()+_(6)_;-_s=s+s2s2hi;s2hi+;coutsendl;return 0;