noip2015初赛普及组答案分析
NOIP2015初赛普及组C++题目及答案 (2)
![NOIP2015初赛普及组C++题目及答案 (2)](https://img.taocdn.com/s3/m/fd5390f5011ca300a6c390fa.png)
选手注意:第二十一届全国青少年信息学奥林匹克联赛初赛普及组C++语言试题竞赛时间:2015年10月11日14:3016:30试题纸共有7页,答题纸共有2页,满分100分。
请在答题纸上作答,写在试题纸上的一律无效。
不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共20题,每题分,共计30分;每题有且仅有一个正确选项)1. 1MB等于()。
字节字节字节字节2. 在PC机中,PENTIUM (奔腾)、酷睿、赛扬等是指()。
A.生产厂家名称B.硬盘的型号的型号 D.显示器的型号3. 操作系统的作用是()。
A.把源程序译成目标程序B.便于进行数据管理C. 控制和管理系统资源D.实现硬件之间的连接4. 在计算机内部用来传送、存贮、加工处理的数据或指令都是以()形式进行的。
A.二进制码B.八进制码C.十进制码D.智能拼音码5. 下列说法正确的是()。
A. CPU的主要任务是执行数据运算和程序控制B. 存储器具有记忆能力,其中信息任何时候都不会丢失C. 两个显示器屏幕尺寸相同,则它们的分辨率必定相同D. 个人用户只能使用Wifi的方式连接到Internet6. 二进制数00100100和00010100的和是()。
A. 00101000 010000017. 与二进制小数相等的十六进制数是()A. 0.8 0.4 所谓的“中断”是指()。
A. 操作系统随意停止一个程序的运行B. 当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的过程C. 因停机而停止一个程序的运行D. 电脑死机9. 计算机病毐是()。
A. 通过计算机传播的危害人体健康的一种病毒B. 人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合C. 一种由于计算机元器件老化而产生的对生态环境有害的物质D. 利用计算机的海量高速运算能力而研制出来的用于疾病预防的新型病毒可以用于()。
A.远程传输文件B.发送电子邮件C.浏览网页D.网上聊天11.下面哪种软件不属于即时通信软件()。
NOIP普及组初赛历年试题及答案阅读题篇
![NOIP普及组初赛历年试题及答案阅读题篇](https://img.taocdn.com/s3/m/dfcab817ba1aa8114431d93e.png)
NOIP普及组初赛历年试题及答案阅读题篇阅读程序写结果(共4 题,每题8 分,共计32 分)阅读程序题是得分的关键,因为不是让你上机去运行程序,所以要一步步地读程序,记录相关变量值的变化情况。
因为程序的运行结果只有输出语句才有输出,所以只写出输出语句的结果。
有时要找出规律才能写出结果,特别是循环次数多的情况,另外要注意边界值,不能多算一步也不能少算一步。
解决这类问题的关键在于能够分析程序的结构以及程序段的功能。
常见的有列表法、画流程图法等。
完成这类题目的方法和步骤如下:1、从头到尾通读程序,大致把握程序的算法、找出这个题目的即这个程序想干什么。
抓住了它,不仅得出答案变得较容易,而且对自己的结果也会比较有信心。
2、通过给程序分段、理清程序的结构和层次,达到读懂程序的目的。
3、阅读程序中特别注意跟踪主要变量的值的变化,可以用列表的方法,了解变量变化和程序的运行结果,注意发现规律。
所谓列表法,就是将各变量名作为表头,在程序的执行过程中,将各变量值的变化记录在相应变量的下方。
4、按照程序中输出格式的要求,写出运行结果,并带着结果回到程序进行检查。
在阅读程序时,要特别注意过程、函数所完成的子任务以及和主程序之间的参数传递关系。
在阅读程序中,比较好的方法是首先阅读主程序,看其需要调用的过程或函数是什么,最后要求输出变量是什么;其次在阅读程序中,将较长的程序分成几个程序段(特别注意循环结构、判断结构),阅读理解各程序段的功能以及各程序之间的关联。
NOIP2011-1.#include<iostream>using namespace std;int main(){int i,n,m,ans;cin>>n>>m;i=n;ans=0;while(i<=m){//从i=10~20,共循环计数11次ans+=i;//每次循环,ans累加一次i 值i++;}cout<<ans<<endl;//此时ans值应为(10+20)*11/2,即165 return 0;}输入: 10 20输出: 165NOIP2011-2.#include<iostream>#include<string>using namespace std;int main(){string map= "2223334445556667778889999";//数组中元素位置是从0开始计数的string tel;int i;cin>>tel;for(i=0;i<tel.length();i++)if((tel[i]>='0') && (tel[i]<='9') )//如果输入的tel是0~9,直接输出tel值cout<<tel[i];else if( (tel[i]>='A') && (tel[i]<='Z'))cout<<map[tel[i]-'A'];//如果输入的tel是A~Z,则输出一个map数组中对应的元素//输出元素在map数组中位置为“输入字母与A的ASCII码的差值”//如果输入的是其他字符,比如“-”,则不符合循环条件,无输出cout<<endl;return 0;}输入: CCF-NOIP-2011输出: 22366472011NOIP2011-3.#include<iostream>#include<cstring>using namespace std;const int SIZE= 100;int main(){int n,i,sum,x,a[SIZE];cin>>n;memset(a,0,sizeof(a));for(i=1;i<=n;i++){cin>>x;a[x]++;}//循环结束时数组中的值为:a[1]=1,a[2]=2,a[3]=3,a[4]=2,a[5]=1,a[6]=2 i=0;sum=0;while(sum<(n/2+1)){//当sum值大于等于n/2+1,即sum>=6的时候,循环结束i++;sum+=a[i];}cout<<i<<endl;//输出循环结束时i 的值(不是sum的值)return 0;}输入:114 5 6 6 4 3 32 3 2 1输出: 3NOIP2011-4.#include<iostream>using namespace std;int solve(int n,int m){int i,sum;if(m==1) return 1;//递归函数solve(i,m)中m=1时返回函数值为1sum=0;for(i=1;i<n;i++)//递归函数solve(i,m)中i=1时不循环,sum=0sum+= solve(i,m-1);return sum;//可递归求得sum=solve(1,3)+(2,3)+(3,3)+(4,3)+(5,3)+(6,3)}int main(){int n,m;cin>>n>>m;cout<<solve(n,m)<<endl; //输出函数值,即sum值return 0;}输入: 7 4输出: 20NOIP2012-1.#include<iostream> using namespace std; int a, b, c, d, e, ans; int main(){cin>>a>>b>>c;d = a+b;e = b+c;ans = d+e;//ans=a+b+b+ccout<<ans<<endl;return 0;}输入: 1 2 5输出: 10NOIP2012-2.#include<iostream>using namespace std;int n, i, ans;int main(){cin>>n;ans = 0;for (i = 1; i <= n; i++)if (n % i == 0)ans++;//统计1~18中18的因数个数cout<<ans<<endl;return 0;}输入: 18输出: 6NOIP2012-3.#include<iostream>using namespace std;int n, i, j,a[100][100];int solve(int x,int y){int u, v;if(x == n)return a[x][y];//递归边界:当x=5时,solve(5,y)=a[5][y]u= solve(x + 1, y);v= solve(x + 1, y + 1);if(u > v)return a[x][y] + u;elsereturn a[x][y] + v;//用递归最终求得solve(1,1)=a[1][1]+solve(2,2)=2+12=14 }int main(){cin>>n;for(i = 1; i <= n; i++) for (j = 1; j <= i; j++) cin>>a[i][j];cout<<solve(1,1)<<endl; return 0;}输入:52-1 42 -1 -2-1 6 4 03 2 -1 5 8输出: 14NOIP2012-4.#include<iostream>#include<string> using namespace std; int n, ans, i, j;string s;char get(int i){if(i < n)return s[i];elsereturn s[i-n];//i<8时,get(i)返回s[i];i>=8时,get(i)返回s[i-8],从第一个开始返回}int main(){cin>>s;n= s.size();ans= 0;for(i = 1; i <= n-1; i++){for (j = 0; j <= n-1; j++)if (get(i+j) < get(ans+j)){ans = i;break;}else if (get(i+j) > get(ans+j))break;}//此循环执行完毕,ans=7for(j = 0; j <= n-1; j++)cout<<get(ans+j);//1,ans+j<8,输出s[7+0];2,ans+j=8,输出s[8-8];3,ans+j=9,输出s[9-8]……cout<<endl;return 0;}输入: CBBADADA输出: ACBBADADNOIP2013-1.#include<iostream>using namespace std;int main(){inta, b;cin>>a>>b;cout<<a<<"+"<<b<<"="<<a+b<<endl;return 0;}//输出:3+5=8输入: 3 5输出: 3+5=8NOIP2013-2.#include<iostream>using namespace std;int main(){int a, b, u, i, num;cin>>a>>b>>u;num = 0;for (i = a; i <= b; i++)if ((i % u) == 0)num++;//1-100之间有多少数是15的倍数cout<<num<<endl;return 0;}输入: 1 100 15输出: 6NOIP2013-3.#include<iostream>using namespace std;int main(){const int SIZE = 100;int n, f, i, left, right, middle, a[SIZE]; cin>>n>>f;for (i = 1; i <= n; i++)cin>>a[i];left = 1;right = n;do {middle= (left + right) / 2;if(f <= a[middle])right = middle;elseleft = middle + 1;}while (left < right);// middle=6,17>a[6],则left=7// middle=9,17<a[9],则right=9 // middle=8,17<a[8],则right=8// middle=7,17=a[7],则right=7 // left=right,直接输出leftcout<<left<<endl;return 0;}输入:12 172 4 6 9 11 15 1718 19 20 21 25 输出: 7NOIP2013-4.#include<iostream>using namespace std;int main(){constint SIZE = 100;intheight[SIZE], num[SIZE], n, ans; cin>>n;for(int i = 0; i < n; i++) {cin>>height[i];num[i] = 1;for (int j = 0; j < i; j++) {if ((height[j] < height[i]) && (num[j] >= num[i]))num[i] = num[j]+1;}}//两两相比,得出num[0], num[1], num[2], num[3], num[4], num[5]ans= 0;for(int i = 0; i < n; i++) {if (num[i] > ans) ans = num[i];}//得出num中最大值,即在数组height中第几位数值最大cout<<ans<<endl;return 0;}输入:62 53 11 12 4输出: 4不懂算法?跟踪变量!列表模拟!遇到递归?画树形图!注意边界!找到规律了?还会流程图?恭喜你,32分到手了!NOIP2014-1.#include <iostream>using namespace std;int main(){int a, b, c, d, ans;cin>> a >> b >> c;d = a - b; //将a-b=-1赋值给d a = d + c; //将d+c=3赋值给a ans = a * b; //ans=a*b=3*3=9 cout<< "Ans = " << ans << endl; return 0;}输入:2 3 4输出: Ans=9NOIP2014-2.#include <iostream>using namespace std;int fun(int n){if (n == 1)return 1; //边界fun(1)=1if (n == 2)return 2; //边界fun(2)=2 return fun(n - 2) - fun(n - 1); } //fun(n)=fun(n-2)-fun(n-1) int main(){int n;cin >> n;cout << fun(n) << endl;//fun(7)=fun(5)-fun(6)=-11 return 0;}输入: 7输出: -11NOIP2014-3.#include <iostream>#include <string>using namespace std;int main(){int i, len;getline(cin, st);len = st.size();for(i = 0; i < len; i++){if (st[i] >= 'a' && st[i] <= 'z')st[i] = st[i] - 'a' + 'A';} //如果字符串st中字母小写,则替换成大写cout<< st << endl;return 0;}输入: Hello, my name is Lostmonkey.输出: HELLO, MY NAME IS LOSTMONKEY.NOIP2014-4.#include <iostream>using namespace std;const int SIZE =100;int main(){int p[SIZE];int n, tot, i, cn;cin>> n;for(i = 1; i <= n; i++)p[i] = 1; //p[1]-p[30]中所有元素赋值1 for(i = 2; i <= n; i++){if (p[i] == 1)tot++; //计数cn = i * 2; //找出2-30中所有2i while (cn <= n) {p[cn] = 0;cn += i; //找出2-30中所有3i}}//对2-30中素数计数,并输出个数cout<< tot << endl;return 0;}输入: 30输出: 10NOIP2015-1.#include <iostream>using namespace std;int main(){int a, b, c;a = 1;b = 2;c = 3;if(a > b) //不符合循环条件,不执行if(a > c)cout << a << ' ';elsecout << b << ' ';cout << c << endl;return 0;}输出: 3NOIP2015-2.#include <iostream>using namespace std;struct point{int x;int y;}; //声明结构体类型pointint main(){int a, b, c;struct EX{int a;int b;point c;}e; //声明结构体类型EXe.a = 1; //结构体变量e中变量ae.b = 2; //结构体变量e中变量be.c.x = e.a + e.b;//结构体变量e中的结构体变量c中的变量x e.c.y = e.a * e.b;//结构体变量e中的结构体变量c中的变量y cout << e.c.x << ','<< e.c.y << endl; return 0;}输出: 3,2NOIP2015-3.#include <iostream>#include <string>using namespace std;int main(){string str;int i;int count;count = 0;getline(cin, str);for(i = 0; i < str.length();i++)if(str[i] >= 'a' &&str[i] <= 'z')count++; //统计字符串中小写字母数量cout << "It has "<< count << " lowercases" << endl; return 0;}输入: NOI2016will be held in Mian Yang.输出: It has 18 lowercasesNOIP2015-4.#include <iostream>#include <string>using namespace std;void fun(char *a, char *b){a = b;(*a)++;} //指针题int main(){char c1, c2, *p1, *p2;c1 = 'A';c2 = 'a';p1 = &c1;p2 = &c2;fun(p1, p2);//p1=p2=&c2,把c2的地址赋值给指针变量p1 //p1++,则有&’a’+1=&’b’, 所以,c2=’b’,cout << c1 << c2<< endl;return 0;}输出: AbNOIP2016-1.#include <iostream>using namespace std;int main(){int max, min, sum, count = 0;int tmp;cin>> tmp;if(tmp == 0)return0; //如果输入的数字是0,程序退出max= min = sum = tmp;count++;while(tmp != 0) {cin>> tmp;if(tmp != 0) {sum += tmp; //求和count++;//计数if(tmp > max)max = tmp; //找出最大值if(tmp < min)min = tmp; //找出最小值}}cout<< max << "," << min << ","<< sum / count << endl; //输出“最大值, 最小值, 平均值”return 0;}输入: 1 2 3 4 5 6 0 7输出: 6,1,3NOIP2016-2.#include <iostream>using namespace std;int main(){int i = 100, x = 0, y = 0;while (i > 0) {i--;x = i % 8;if (x == 1)y++;} //统计1-100中有多少数是“8的倍数+1”cout << y << endl;return 0;}输出: 13NOIP2016-3.#include <iostream>using namespace std;int main(){int a[6] = {1, 2, 3, 4, 5, 6};int pi = 0;int pj = 5;int t , i;while(pi < pj) {t =a[pi];a[pi]= a[pj];a[pj]= t;pi++;pj--;} //把数组a[6]中的数字顺序颠倒过来for(i = 0; i < 6; i++)cout<< a[i] << ",";cout<< endl;return 0;}输出: 6,5,4,3,2,1,NOIP2016-4.#include <iostream>using namespace std;int main(){int i, length1, length2; strings1, s2;s1= "I have a dream.";s2 = "I Have A Dream."; length1 = s1.size();length2 = s2.size();for (i = 0; i < length1; i++)if (s1[i] >= 'a' && s1[i]<= 'z') s1[i] -= 'a' - 'A';//把s1里的小写字母全部换成大写for (i = 0; i < length2; i++)if (s2[i] >= 'a' && s2[i]<= 'z') s2[i] -= 'a' - 'A';//把s2里的小写字母全部换成大写if (s1 == s2)cout << "=" <<endl;else if (s1 > s2)cout << ">" <<endl;elsecout << "<" <<endl;return 0;}输出: =。
2015年信息学奥赛NOIP普及组初赛试题及参考答案
![2015年信息学奥赛NOIP普及组初赛试题及参考答案](https://img.taocdn.com/s3/m/f710353758fafab069dc0262.png)
│ 20
一、选择题
⒛在 NOI 系列赛事中参赛选手必须使用累承办单位统一提供的设备。下列物品中不允 许选手自带的是( )。 A.鼠标 B.笔 C.身份证 D.准考证
│ 21
二、问题解答
⒈重新排列 1234 使得每一个数字都不在原来的位置上,一 共有________种排法。
│ 22
二、问题解答
⒉一棵结点数为 2015 的二叉树最多有______个叶子结点。
│ 18
一、选择题
⒙下列选项中不属于视频文件格式的是( )。 A.TXT B.AVI C.MOV D.RMVB
│ 19
一、选择题
⒚设某算法的计算时间表示为递推关系式 T(n)=T(n-1)+n(n 为正整数)及 T(0)=1,则该算法的时间复 杂度为( )。 A.O(logn) B.O(nlogn) C.O(n) D.O(n2)
⒌下列说法正确的是( )。 A.CPU 的主要任务是执行数据运算和程序控制 B.存储器具有记忆能力,其中信息任何时候都不会丢失 C.两个显示 Wifi 的方式连接到 Internet
│6
一、选择题
⒍二进制数 00100100 和 00010100 的和是( )。 A.00101000 B.01100111 C.01000100 D.00111000
│ 14
一、选择题
⒕线性表若采用链表存储结构,要求内存中可用存储单元地址( )。 A.必须连续 B.部分地址必须连续 C.一定不连续 D.连续不连续均可
│ 15
一、选择题
⒖今有一空栈 S,对下列待进栈的数据元素序列 a,b,c,d,e,f 依次进行进栈,进栈,出栈,进栈,进栈,出栈的操作,则此操作 完成后,栈 S 的栈顶元素为 A.f B.c C.a D.b
NOIP普及组历届试题分析
![NOIP普及组历届试题分析](https://img.taocdn.com/s3/m/7e886f08cc7931b764ce150f.png)
对于100%的数据,3 ≤ n ≤ 100 测验题给出的正整数大小不超过10,000。
试题分析
题意大意:给你n个数,在这n个数中,找 到满足A+B=C的C的个数,注意不是这个 等式的个数。
样例中,1,2,3,4有1+2=3,1+3=4两个。
由于本题数据规模n<=100,我们可以直接
枚举C, A, B,三层循环解决问题。
扫雷游戏 (noip2015普及组第二题)
输入样例 1 33 *?? ??? ?*? 输入样例 2 23 ?*? *??
输出样例 1 mine.out *10 221 1*1 输出样例 2 mine.out 2*1 *21
对于 100%的数据,1≤n≤100,1≤m≤100
问题分析:
本题也是简单的枚举类试题。 我们从雷区的第一行第一列(1,1)开始,判断它周围 有多少个地雷。 由于本题读入的是字符,读入时需要注意: readln(n,m); for i=1 to n do begin for j=1 to m do read(a[i][j]); readln; end;
比例简化 (noip2014普及组第二题)
在社交媒体上,经常会看到针对某一个观点同意与 否的民意调查以及结果。例如,对某 一观点表示 支持的有 1498 人,反对的有 902 人,那么赞同与 反对的比例可以简单的记为1498:902。 不过,如果把调查结果就以这种方式呈现出来,大 多数人肯定不会满意。因为这个比例的数值太大, 难以一眼看出它们的关系。对于上面这个例子,如 果把比例记为 5:3,虽然与 真实结果有一定的误差, 但依然能够较为准确地反映调查结果,同时也显得 比较直观。 现给出支持人数 A,反对人数 B,以及一个上限 L, 请你将 A 比 B 化简为 A’比 B’,要求在 A’和 B’均 不大于 L 且 A’和 B’互质(两个整数的最大公约数 是 1)的前提下,A’/B’ ≥ A/B 且 A’/B’ - A/B 的值 尽可能小。
noip2015普及组题解最终
![noip2015普及组题解最终](https://img.taocdn.com/s3/m/698b4afd102de2bd960588ca.png)
本次试题前2题比较简单,34题容易拿到部分分,但满分有难度1. 金币(coin.cpp/c/pas)【问题描述】国王将金币作为工资,发放给忠诚的骑士。
第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。
请计算在前K天里,骑士一共获得了多少金币。
【输入格式】输入文件名为coin.in。
输入文件只有1行,包含一个正整数K,表示发放金币的天数。
【输出格式】输出文件名为coin.out。
输出文件只有1行,包含一个正整数,即骑士收到的金币数。
【样例输入】coin.in6【样例输出】coin.out14【输入输出样例1说明】骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。
因此一共收到1+2+2+3+3+3=14枚金币。
【数据范围】对于100%的数据,1 ≤K ≤10,000。
【题解】关注到K的范围是10000后,就不需要考虑数学公式,纯模拟就行,考点就是for循环了var i,j,count,n,ans:longint;beginassign(input,'coin.in');reset(input);assign(output,'coin.out');rewrite(output);readln(n);for i:=1 to 1000 dofor j:=1 to i dobegininc(count);inc(ans,i);if count=n then beginwriteln(ans);close(input);close(output);halt;end;end;end.2.扫雷游戏(mine.cpp/c/pas)【问题描述】扫雷游戏是一款十分经典的单机小游戏。
第十五届全国青少年信息学奥林匹克联赛初赛试题答案
![第十五届全国青少年信息学奥林匹克联赛初赛试题答案](https://img.taocdn.com/s3/m/826c83bbf424ccbff121dd36a32d7375a417c6c3.png)
第十五届全国青少年信息学奥林匹克联赛初赛试题答案第十五届全国青少年信息学奥林匹克联赛初赛试题(普及组 C语言二小时完成)● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●3 单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确答案。
)1、关于图灵机下面的说法哪个是正确的:DA) 图灵机是世界上最早的电子计算机。
B) 由于大量使用磁带操作,C) 图灵机运行速度很慢。
D) 图灵机是英国人图灵发明的,E) 在二战中为破译德军的密码发挥了重要作用。
F) 图灵机只是一个理论上的计算模型。
2、关于计算机内存下面的说法哪个是正确的:BD) 随机存储器(RAM)的意思是当程序运行时,每次具体分配给程序的内存位置是随机而不确定的。
E) 1MB内存通常是指1024*1024字节大小的内存。
F) 计算机内存严格说来包括主存(memory)、高速缓存(cache)和寄存器(register)三个部分。
G) 一般内存中的数据即使在断电的情况下也能保留2个小时以上。
3、关于BIOS下面说法哪个是正确的:AA) BIOS是计算机基本输入输出系统软件的简称。
B) BIOS里包含了键盘、鼠标、声卡、显卡、打印机等常用输入输出设备的驱动程序。
C) BIOS一般由操作系统厂商来开发完成。
D) BIOS能提供各种文件拷贝、复制、删除以及目录维护等文件管理功能。
4、关于CPU下面哪个说法是正确的:AA) CPU全称为中央处理器(或中央处理单元)。
B) CPU可以直接运行汇编语言。
C) 同样主频下,32位的CPU比16位的CPU运行速度快一倍。
D) CPU最早是由Intel公司发明的。
5、关于ASCII,下面哪个说法是正确的:BA) ASCII码就是键盘上所有键的唯一编码。
B) 一个ASCII码使用一个字节的内存空间就能够存放。
C) 最新扩展的ASCII编码方案包含了汉字和其他欧洲语言的编码。
D) ASCII码是英国人主持制定并推广使用的。
NOIP2015普及组复赛试题讲解(c++版本)
![NOIP2015普及组复赛试题讲解(c++版本)](https://img.taocdn.com/s3/m/b836f10d0b4c2e3f57276361.png)
NOIP2015普及组C++
试题分析
2017. 07. 28
第1题 “金币”简述
-2-
参考程序 C++
#include <iostream>
using namespace std;
int main()
{
long k,n=1,sum=0;
cin>>k;
左下、右上、右下八个方向上与之直接相邻的格子。
-4-
确定解题思路
模拟题,对每个格子进行标记。 如果是雷,标记为-1,并把对应八个格子中不是
雷的格子的数值递增1。 注意字符的读入 二维数组存放数据。
-5-
参考程序
#include <iostream>
using namespace std;
位置大于最远距离远的点的依次搜索找到最大值 (距离两倍+疲劳值),与最大堆的堆顶比较。
定义一种特殊的三元组:(x, y, z),其中x,y,z都代表纸 带上格子的编号,这里的三元组要求满足以下两个条件:
x, y, z都是整数, x<y<z ,y−x=z−y colorx = colorz 满足上述条件的三元组的分数规定为
(x+z)∗(numberx+numberz)。整个纸带的分数规定为所有 满足条件的三元组的分数的和。这个分数可能会很大,你 只要输出整个纸带的分数除以 10,007 所得的余数即可。
while (n<=k)
{
sum+=n*n;//N个金币发N天
k=k-n;//剩余天数
NOIP2015普及组复赛试题讲解(c++版本)
![NOIP2015普及组复赛试题讲解(c++版本)](https://img.taocdn.com/s3/m/6d54302d3968011ca3009180.png)
- 16 -
试题分析
BYE
温馨提示:
先理解题目在看题解。
The END
2017. 07. 28
数值加1 } }
d[i][j]=-1;//用-1表示地雷 long l1,l2; for(l1=-1;l1<=1;l1++) for(l2=-1;l2<=1;l2++) { if(d[i+l1][j+l2]!=-1) d[i+l1][j+l2]++; }//边上八个位置的格子不是雷则
if(
} for(i=1;i<=n;i++) { for(j=1;j<=m;j++) d[i][j]==-1) cout<<'*'; else cout<<d[i][j]; cout<<endl; }//输出 return 0;
-3-
第2题 “扫雷游戏”简述
扫雷游戏是一款十分经典的单机小游戏。 在n行m列的雷区中有一些格子含有地雷(称之为地雷格), 其他格子不含地雷(称之为非地雷格)。 玩家翻开一个非地雷格时,该格将会出现一个数字——提 示周围格子中有多少个是地雷格。 游戏的目标是在不翻出任何地雷格的条件下,找出所有的 非地雷格。 现在给出n行m列的雷区中的地雷分布,要求计算出每个非 地雷格周围的地雷格数。 注:一个格子的周围格子包括其上、下、左、右、左上、 左下、右上、右下八个方向上与之直接相邻的格子。
【分析】K的规模比较少,直接用模拟,一天一天发金币。 N天发N枚金币,N递增1,剩余天数K-N 预计时间15-25分钟
-2-
参考程序 C++
NOIP2015年初赛普和组C 题目和答案解析
![NOIP2015年初赛普和组C 题目和答案解析](https://img.taocdn.com/s3/m/01597ec804a1b0717fd5dde9.png)
第二十届全国青少年信息学奥林匹克联赛初赛普及组C++语言试题2014年一、快单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)⒈以下哪个是面向对象的高级语言( )。
A.汇编语言B.C++C.FortranD.Basic⒉1TB代表的字节数是( )。
A.2的10次方B.2的20次方C.2的30次方D.2的40次方⒊二进制数00100100和00010101的和是( )。
A.00101000B.001010100C.01000101D.00111001⒋以下哪一种设备属于输出设备( )。
A.扫描仪B.键盘C.鼠标D.打印机⒌下列对操作系统功能的描述最为完整的是( )。
A.负责外设与主机之间的信息交换B.负责诊断机器的故障C.控制和管理计算机系统的各种硬件和软件资源的使用D.将没有程序编译成目标程序⒍CPU、存储器、I/O设备是通过( )连接起来的。
A.接口B.总线C.控制线D.系统文件⒎断电后会丢失数据的存储器是( )。
A.RAMB.ROMC.硬盘D.光盘⒏以下哪一种是属于电子邮件收发的协议( )。
A.SMTPB.UDPC.P2PD.FTP⒐下列选项中不属于图像格式的是( )。
A.JPEG格式B.TXT格式C.GIF格式D.PNG格式⒑链表不具有的特点是( )。
A.不必事物估计存储空间B.可随机访问任一元素C.插入删除不需要移动元素D.所需空间与线性表长度成正比⒒下列各无符号十进制整数中,能用八位二进制表示的数中最大的是( )。
A.296B.133C.256D.199⒓下列几个32位IP地址中,书写错误的是( )。
A.162.105.135.27B.192.168.0.1C.256.256.129.1D.10.0.0.1⒔要求以下程序的功能是计算:s=1+1/2+1/3+...+1/10。
#include <iostream>using namespace std;int main(){int n;float s;s = 1.0;for(n = 10; n > 1; n--)s = s + 1 / n;cout << s << endl;return 0;}程序运行后输出结果错误,导致错误结果的程序行是( )。
第十五届全国青少年信息学奥林匹克联赛初赛试题及答案官方版
![第十五届全国青少年信息学奥林匹克联赛初赛试题及答案官方版](https://img.taocdn.com/s3/m/8bac2dd97fd5360cba1adbb3.png)
第十五届全国青少年信息学奥林匹克联赛初赛试题(普及组 C语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一.单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确答案。
)1、关于图灵机下面的说法哪个是正确的:A)图灵机是世界上最早的电子计算机。
B)由于大量使用磁带操作,图灵机运行速度很慢。
C)图灵机是英国人图灵发明的,在二战中为破译德军的密码发挥了重要作用。
D)图灵机只是一个理论上的计算模型。
2、关于计算机内存下面的说法哪个是正确的:A)随机存储器(RAM)的意思是当程序运行时,每次具体分配给程序的内存位置是随机而不确定的。
B)1MB内存通常是指1024*1024字节大小的内存。
C)计算机内存严格说来包括主存(memory)、高速缓存(cache)和寄存器(register)三个部分。
D)一般内存中的数据即使在断电的情况下也能保留2个小时以上。
3、关于BIOS下面说法哪个是正确的:A)BIOS是计算机基本输入输出系统软件的简称。
B)BIOS里包含了键盘、鼠标、声卡、显卡、打印机等常用输入输出设备的驱动程序。
C)BIOS一般由操作系统厂商来开发完成。
D)BIOS能提供各种文件拷贝、复制、删除以及目录维护等文件管理功能。
4、关于CPU下面哪个说法是正确的:A)CPU全称为中央处理器(或中央处理单元)。
B)CPU可以直接运行汇编语言。
C)同样主频下,32位的CPU比16位的CPU运行速度快一倍。
D)CPU最早是由Intel公司发明的。
5、关于ASCII,下面哪个说法是正确的:A)ASCII码就是键盘上所有键的唯一编码。
B)一个ASCII码使用一个字节的内存空间就能够存放。
C)最新扩展的ASCII编码方案包含了汉字和其他欧洲语言的编码。
D)ASCII码是英国人主持制定并推广使用的。
6、下列软件中不是计算机操作系统的是:A) Windows B) Linux C) OS/2 D) WPS7、关于互联网,下面的说法哪一个是正确的:A)新一代互联网使用的IPv6标准是IPv5标准的升级与补充。
noip2015普及组初赛试题
![noip2015普及组初赛试题](https://img.taocdn.com/s3/m/0f8cb1862dc58bd63186bceb19e8b8f67d1cef78.png)
noip2015普及组初赛试题题目描述:noip2015普及组初赛试题,是一项计算机竞赛中的初级赛题,要求参赛者运用所学的计算机知识和算法技巧解决问题。
下面将按照试题要求来呈现相关内容。
试题一:计算两数之和给定两个整数,计算它们的和。
输入输入共一行,包含两个整数a和b,中间用空格隔开。
输出输出共一行,包含一个整数,表示a与b的和。
示例输入:3 5输出:8解题思路我们可以通过简单的加法运算得到两数之和。
首先将输入的两个整数分别赋值给变量a和b,然后将它们相加,最后将结果输出即可。
代码实现```pythona, b = map(int, input().split())sum = a + bprint(sum)```试题二:计算矩形的面积给定一个矩形的长和宽,计算它的面积。
输入输入共一行,包含两个整数a和b,中间用空格隔开,分别表示矩形的长和宽。
输出输出共一行,包含一个整数,表示矩形的面积。
示例输入:4 6输出:24解题思路矩形的面积可以通过将长和宽相乘得到。
首先将输入的两个整数分别赋值给变量a和b,然后将它们相乘,最后将结果输出即可。
代码实现a, b = map(int, input().split())area = a * bprint(area)```试题三:判断闰年给定一个年份,判断它是否是闰年。
输入输入共一行,包含一个整数year,表示给定的年份。
输出输出共一行,包含一个字符串,表示年份是否是闰年。
如果是闰年,输出"Yes",否则输出"No"。
示例输入:2000输出:Yes解题思路判断一个年份是否是闰年的条件是:能被4整除但不能被100整除,或者能被400整除。
我们可以通过使用逻辑运算符and和or来判断是否满足这些条件。
```pythonyear = int(input())if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:print("Yes")else:print("No")```试题四:统计字符个数给定一个字符串,统计其中某个字符出现的次数。
NOIP普及组初赛历年试题及答案求解题篇
![NOIP普及组初赛历年试题及答案求解题篇](https://img.taocdn.com/s3/m/8b324d9bd4d8d15abe234e4e.png)
NOIP普及组初赛历年试题及答案求解题篇问题求解:每次共2题,每空5分,共计10分。
每题全部答对得 5 分,没有部分分。
注:答案在文末在NOIP初赛问题求解中,经常会遇到排列组合问题。
这一类问题不仅内容抽象,解法灵活,而且解题过程极易出现“重复”和“遗漏”的错误,这些错误甚至不容易检查出来,所以解题时要注意不断积累经验,总结解题规律。
解答排列组合问题,首先必须认真审题,明确是属于排列问题还是组合问题,或者属于排列与组合的混合问题,其次要抓住问题的本质特征,灵活运用基本原理和公式进行分析解答。
同时还要注意讲究一些策略和技巧,比如采用分类、分步、捆绑等方法,也可以借助表格、方程等工具,使一些看似复杂的问题迎刃而解。
NOIP2011-1. 每份考卷都有一个8位二进制序列号。
当且仅当一个序列号含有偶数个1时,它才是有效的。
例如,0000000、01010011都是有效的序列号,而11111110不是。
那么,有效的序列号共有______个。
NOIP2011-2. 定义字符串的基本操作为: 删除一个字符、插入一个字符和将一个字符修改成另外一个字符这三种操作。
将字符串A变成字符串B的最少操作步数,称为字符串A到字符串B的编辑距离。
字符串“ ABCDEFG ”到字符串“BADECG ”的编辑距离为_______。
NOIP2012-1. 如果平面上任取n 个整点(横纵坐标都是整数) ,其中一定存在两个点,它们连线的中点也是整点,那么n至少是_____。
NOIP2012-2. 在NOI期间,主办单位为了欢迎来自全国各地的选手,举行了盛大的晚宴。
在第十八桌,有5名大陆选手和5名港澳选手共同进膳。
为了增进交流,他们决定相隔就坐,即每个大陆选手左右相邻的都是港澳选手、每个港澳选手左右相邻的都是大陆选手。
那么,这一桌共有_____种不同的就坐方案。
注意:如果在两个方案中,每个选手左边相邻的选手均相同,则视为同一个方案。
NOIP2013-1. 7 个同学围坐一圈,要选2 个不相邻的作为代表,有_____种不同的选法。
NOIP2015普及组复赛试题讲解(c++版本) ppt课件
![NOIP2015普及组复赛试题讲解(c++版本) ppt课件](https://img.taocdn.com/s3/m/063042ae89eb172ded63b781.png)
2)%mod*num[i]%mod*i%mod)%
mod;
}
printf("%d\n",ans);
return 0;
}
PPT课件
- 12 -
第4题 “推销员”简述
阿明是一名推销员,他奉命到螺丝街推销他们公司的产 品。螺丝街是一条死胡同,出口与入口是同一个,街道 的一侧是围墙,另一侧是住户。螺丝街一共有 N 家住户, 第 i 家住户到入口的距离为 Si 米。由于同一栋房子里可 以有多家住户,所以可能有多家住户与入口的距离相等。 阿明会从入口进入,依次向螺丝街的 X 家住户推销产品, 然后再原路走出去。 阿明每走 1 米就会积累 1 点疲劳值, 向第 i 家住户推销产品会积累 Ai 点疲劳值。阿明是工作 狂,他想知道,对于不同的 X,在不走多余的路的前提 下,他最多可以积累多少点疲劳值。
请计算前K天里,骑士一共获得了多少金币。
对于全部数据,1≤K≤10000。
【分析】K的规模比较少,直接用模拟,一天一天发金币。
N天发N枚金币,N递增1,剩余天数K-N
预计时间15-25分钟
PPT课件
-2-
参考程序 C++
#include <iostream>
using namespace std;
非地雷格。 现在给出n行m列的雷区中的地雷分布,要求计算出每个非
地雷格周围的地雷格数。 注:一个格子的周围格子包括其上、下、左、右、左上、
左下、右上、右下八个方向上与之直接相邻的格子。
PPT课件
-4-
确定解题思路
模拟题,对每个格子进行标记。 如果是雷,标记为-1,并把对应八个格子中不是
NOIP2015普及组复赛解题报告
![NOIP2015普及组复赛解题报告](https://img.taocdn.com/s3/m/39456522f121dd36a32d82fa.png)
N O I P2015普及组解题报告南京师范大学附属中学树人学校CT1.金币c/pas)【问题描述】国王将金币作为工资,发放给忠诚的骑士。
第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。
请计算在前K天里,骑士一共获得了多少金币。
【输入格式】输入文件名为。
输入文件只有1行,包含一个正整数K,表示发放金币的天数。
【输出格式】输出文件名为。
输出文件只有1行,包含一个正整数,即骑士收到的金币数。
【数据说明】对于100%的数据,1≤K≤10,000。
【思路】模拟【时空复杂度】O(k),O(1)2、扫雷游戏(c/pas)【问题描述】扫雷游戏是一款十分经典的单机小游戏。
在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。
玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。
游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。
现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。
注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。
【输入格式】输入文件名为。
输入文件第一行是用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数。
接下来n行,每行m个字符,描述了雷区中的地雷分布情况。
字符’*’表示相应格子是地雷格,字符’’表示相应格子是非地雷格。
相邻字符之间无分隔符。
【输出格式】输出文件名为。
输出文件包含n行,每行m个字符,描述整个雷区。
用’*’表示地雷格,用周围的地雷个数表示非地雷格。
相邻字符之间无分隔符。
【数据说明】对于100%的数据,1≤n≤100,1≤m≤100。
NOIP2015普及组复赛试题解题报告word版第一二题满分程序
![NOIP2015普及组复赛试题解题报告word版第一二题满分程序](https://img.taocdn.com/s3/m/16389b3cccbff121dd3683b3.png)
NOIP2015普及组复赛试题解题报告word版第一二题满分程序CCF全国信息学奥林匹克联赛(NOIP2015)复赛普及组一.题目概况中文题目名称金币扫雷游戏求和推销员英文题目与子目录名coin mine sum salesman 可执行文件名coin mine sum salesman 输入文件名coin.in mine.in sum.in salesman.in 输出文件名coin.out mine.out sum.out salesman.out 每个测试点时限1秒1秒1秒1秒测试点数目10101010每个测试点分值10101010附加样例文件有有有有结果比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统传统运行内存上限128M128M128M128M二.提交源程序文件名对于C++语言coin.cpp mine.cpp sum.cpp salesman.cpp 对于C语言coin.c mine.c sum.c salesman.c 对于pascal语言coin.pas mine.pas sum.pas salesman.pas三.编译命令(不包含任何优化开关)对于C++语言g++-o coincoin.cpp-lm g++-o minemine.cpp-lmg++-o sumsum.cpp-lmg++-o salesmansalesman.cpp-lm对于C语言gcc-o coin coin.c-lm gcc-o mine mine.c-lmgcc-o sumsum.c-lmgcc-o salesmansalesman.c-lm对于pascal语言fpc coin.pas fpc mine.pas fpc sum.pas fpc salesman.pas注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
NOIP2015普及组复赛试题讲解(c++版本)
![NOIP2015普及组复赛试题讲解(c++版本)](https://img.taocdn.com/s3/m/6040c50bf18583d049645994.png)
数据结构
SIZE=100005 数组大小 int color[SIZE]; 格子的颜色值 int num[SIZE]; ,格子上的数值 int sum[2][SIZE]; 相同颜色分奇偶求和 int d[2][SIZE]; 相同颜色的数量,分奇偶统计 数据输入量较多,使用scanf();
sum+=2*y*(number[yj]+number[y+j]); sum%=10007;
}
j++;
} } cout<<sum<<endl; return 0;
-9-
确定解题思路
观察题意可以得知,如果第i位和第j位同色,那么 就一定能够组成一个三元组,并且三元组的价值完 全与中间那个数无关。那么,我们就用一个数组存 储同奇偶性的同色方块,用n表示数值,i和j表示坐 标。那么价值就是(ni+nj)*(i+j) 每组的数的下标用a1~an表示,数值用n1~nk表 示,用sum表示数值之和。答案就是 (n1+n2)*(a1+a2)+……+……。如果这样做就是 O(n^2/m)的算法。(估计能过60分) 转换公式(a1*n1+a2*n2+…+ak*nk)*(n-2)+ (a1+a2+…+ak)*(n1+n2+…nk) O(n)的时间复杂度
} -6-
第3题 “求和”简述
一条狭长的纸带被均匀划分出了n个格子,格子编号从1到 n。每个格子上都染了一种颜色colori(用[1,m]当中的一 个整数表示),并且写了一个数字numberi。
定义一种特殊的三元组:(x, y, z),其中x,y,z都代表纸 带上格子的编号,这里的三元组要求满足以下两个条件: x, y, z都是整数, x<y<z ,y−x=z−y colorx = colorz 满足上述条件的三元组的分数规定为 (x+z)∗(numberx+numberz)。整个纸带的分数规定为所有 满足条件的三元组的分数的和。这个分数可能会很大,你 只要输出整个纸带的分数除以 10,007 所得的余数即可。 - 7 -
信息学奥赛NOIP普及组历届试题分析演示文稿
![信息学奥赛NOIP普及组历届试题分析演示文稿](https://img.taocdn.com/s3/m/44a2d670f56527d3240c844769eae009581ba205.png)
金币 (noip2015普及组第一题)
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两 天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每 天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;
这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在 之后的连续N+1天里,每天收到N+1枚金币。 请计算在前K天里,骑士一共获得了多少金币。
输入格式: 输入文件只有1行,包含一个正整数K,表示发放金币的天数。
输出格式:
输出文件只有1行,包含一个正整数,即骑士收到的金币数。 输入输出样例
输入样例:
1000
输出样例: 29820
第15页,共31页。
螺旋方阵 (noip2014普及组第三题)
一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动;
如果前方是未曾经过的格子,则继续前进,否则右转;重 复上述操作直至经过矩阵中所有格子。根据经过顺序,在
格子中依次填入1,2,3,....,便构成了一个螺旋矩阵。 现给出矩阵大小n以及i和j,请你求出该矩阵中第i行第j
列的数是多少。
下图是一个n=4时的螺旋矩阵。
第16页,共31页。
螺旋方阵 (noip2014普及组第三题)
请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。 比如在给定范围[2, 22],数字2在数2中出现了1次,在数12 中出现了1次,在数20中出现了1次,在数21中出现了1次, 在数22中出现了2次,所以数字2在该范围内一共出现了6次。 输入格式 输入共一行,为两个正整数L和R,之间用一个空格隔开。 输出格式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单项选择题
1.A。
计算机内部的用来传送、存贮、加工处理的数据或指令都是以二进制形式进行的。
2.A。
写这题我用的是排除法,B选项显然不对,内存在断电后数据会丢失,C选项也是,屏幕的分辨率是可以手动调整的,D选项,当年我们都用宽带连接Internet的。
3.A。
二进制小数转化为十六进制小数时,每四位二进制数转化为以为
十六进制数,故0.10002可以转化为0.816。
4.D。
我的做法是将每个数都化为二进制形式,因为十六进制数和八进
制数转化为二进制数很容易,最后求得答案是D。
5.D。
在链表中,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域,结点与结点之间是用指针
连接的,故地址不必连续。
6.B。
模拟一下进栈出栈的过程就行了,共有6次操作:进栈,进栈,出栈,进栈,进栈,出栈,每次操作后栈内元素分别为”a”,”a
b”,”a”,”a b c”,”a b c d”,”a b c”,故最后栈顶元素是c。
7.B。
前序遍历的顺序是”根->左->右”,后序遍历的顺序是”左->右->根”,对照四个答案,只有B能满足题目要求。
8.B。
我们知道树高为n的满二叉树的结点个数为2n−1,当树高为5
时结点个数为31,当树高为6时结点个数为63,故答案是B。
9.B。
画一张图的事情,就不说了。
10.D。
由递推公式可得T(n)=1+(1+2+…+n)=n2+n2+1,故算法时间
的复杂度为O(n2)。
11.D。
用vector存边,由一个顶点的边引到另一个顶点,再不断引出别的顶点,过程中每个顶点和每条边都只用到一遍,故复杂度为O(n+e)。
12.A。
哈夫曼算法用来求哈夫曼树,此树的特点就是引出的路程最短,
求的过程运用到贪心思想,具体的请参考一下别的文章。
13.D。
llink和rlink分别指向前驱和后继,不妨设p的前驱为o,在未插入前
p->llink就是o,o->rlink就是p,插入时,先将o->rlink赋为q,再将
q->rlink赋为p,然后将q->llink赋为o,最后将p->llink赋为q。
14.A。
最粗暴的方法就是直接模拟,不知道有没有更先进的算法。
15.A。
- -丨这题猜猜都是A,哪有考生自带鼠标的。
不定项选择题
1.ABCD。
典型的操作系统有UNIX、Linux、Mac OS X、Windows、iOS、Android、WP、Chrome OS等,还望读者能记住。
2.ABC。
视频文件常见格式有AVI、WMV、MPEG、DivX/xvid、DV、MKV、RM / RMVB、MOV、OGG、MOD等。
3.ACD。
IP地址实际上是32位二进制数,为了便于记忆就分为四段,每段八位,中间用小数点隔开。
每段八位的二进制数转成十进制,大小为0至255。
这种格式称为点分十进制。
4.AB。
树的边数=结点个数-1,哈夫曼树是一棵满二叉树,故叶节点数比非叶节点数多1。
5.AC。
二分图左半部分全黑,右半部分全白就可以了,树的话只要满足子节点和父节点的颜色相异就行了。
问题求解
1.在1和2015之间(包括1和2015在内)不能被4、5、6三个数任意一个数整除的数有_______个。
解析:1075。
题目要求的是不能被整除的数,但仔细想想并没有什么好的求法。
于是转换思想,我们可以先求能被整除的数。
区间内能被4整除的数有503个,能被5整除的数有403个,能被6整除的数有335个,难道只是把这几个数加起来吗?并不是的,我们还要减去能被4和5、4和6、5和6的最小公倍数整除的数,因为这些数被算了两遍。
区间内能被20整除的数有100个,能被12整除的数有167个,能被30整除的有67个,我们将这些数减去之后还不行,因为答案中4、5、6的最小公倍数都被减去了,所以还要加上区间中能被60整除的数。
求出结果是503+403+335-100-67-167+33=940个,这样求出来的是能被整除的数, 所以答案是2015-940=1075个。
2.结点数为5的不同形态的二叉树一共有_______种。
(结点数为2的
二叉树一共有2种:一种是根结点和左儿子,另一种是根结点和右儿子。
)
解析:42。
直接枚举出答案自然是可行,但有更简单的方法,那就是递推。
我们记f n为结点数为n的二叉树的种数:当二叉树的左子树结点个数为0时,有f0×f n−1种方案;当左子树结点个数为1时,有f1×f n−2
种方案;当左子树结点个数为2时,有f2×f n−3种方案;……;当左子树结点个数为n-1个时,有f n−1×f0
种方案。
由此可得
f n=∑i=0n−1f i×f n−1−i
这就是著名的卡特兰数,关于这条公式可以参见一下百度百科的catalan。
求得这个公式之后就可以代入求解了,最后求得答案是42种。
阅读程序写结果
由于代码比较长,在此不给出代码。
1.3,2。
定义了两个结构体,e.a=1,e.b=2,则
e.c.x=e.a+e.b=3,e.c.y=e.a*e.b=2,但要注意答案输出时有个“,”,所以答案是3,2。
2.Ab。
指针变量题,要分清函数传入*a和&a的区别,*a传入的是地址,&a传入的是值,如果不是很懂的话,请仔细阅读指针。
3.citizen。
很容易看出程序输出的是输入数据中长度最长的字符串,故答案是citizen。
4.31。
仔细观察函数内容可以发现函数中的fromPos和toPos并没有什么卵用,所以不用管这两个变量直接求,答案是25−1=31。
完善程序
简单的东西,随便搞搞就行了。
(这句话不是我说的,不用太在意)。