电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

noip普与组初赛历年试题与答案完善题篇

25页
  • 卖家[上传人]:suns****4568
  • 文档编号:60806670
  • 上传时间:2018-11-18
  • 文档格式:PDF
  • 文档大小:216.19KB
  • / 25 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、NOIP 普及组初赛历年试题及答案普及组初赛历年试题及答案 (完善题篇完善题篇) 完善程序,每年两题,每题每空完善程序,每年两题,每题每空 2-4 分,共分,共 28 分。分。 【解题步骤】【解题步骤】 1、仔细读题,尤其是题目给你的解题思路:解决什么问题?用的什么算法?输 入输出是什么? 2、要知道变量的含义,也可通过变量单词的意思知道,比如 sum 表示和,que 表示队列等等。 3、在充分了解前两点的基础上,先根据自己的想法大致想想:如果让你实现程 序,你会怎么做。 4、通读程序,理顺程序结构,千万不要因为程序很长而觉得气馁,有时程序越 长,填空越简单。 5、按照程序执行的顺序做,遇到难的先放一边,继续往下做。有些空格很简单, 一下就能看出来的。 6、到这步为止,程序大概意图就知道了,然后就是填比较难的几格了。这一点 就靠你对程序的理解了。 7、填完了以后,再执行一遍程序,有样例就结合样例,没样例就自己造数据模 拟。 【解题技巧】【解题技巧】 1、变量初始化:这个得结合后面的运算确定,不过有些也很简单,如 sum=0 之类的。 2、for 循环初、终值:如果是嵌套的循环,可结合父

      2、循环或子循环确定。 3、更新最优解:比较或赋值。 4、要填的空格与某句对应,这样的例子在下面能找到很多。 NOIP2011-1.子矩阵 给输入一个 n1*m1 的矩阵 a,和 n2*m2 的矩阵 b ,问 a 中是否存在子矩阵和 b 相等。若存在,输出所有子矩阵左上角的坐标:若不存在输出“There isno answer ”。 #include using namespace std; const int SIZE = 50; int n1,m1,n2,m2,aSIZESIZE,bSIZESIZE; int main() int i,j,k1,k2; bool good ,haveAns; cinn1m1; for(i=1;iaij; cinn2m2; for(i=1;ibij; haveAns=false; for(i=1;i #include using namespace std; const int SIZE=200; struct hugeint int len,numSIZE; ; / 其中 len 表示大整数的位数; num1 表示个位,num2 表示十位,以此类推 h

      3、ugeint times(hugeint a,hugeint b) / 计算大整数 a 和 b 的乘积 int i,j; hugeint ans; memset(ans.num,0,sizeof(ans.num); for(i=1;i0) ans.len=a.len+b.len; else ans.len=a.len+b.len-1; return ans; hugeint add(hugeint a,hugeint b) / 计算大整数 a 和 b 的和 int i;hugeint ans; memset(ans.num,0,sizeof(ans.num); if(a.lenb.len) ans.len=a.len; else ans.len=b.len; for(i=1;i0) ans.len+; return ans; hugeint average(hugeint a,hugeint b) / 计算大整数 a 和 b 的平均数的整数部分 int i; hugeint ans; ans=add(a,b); for(i=ans.len;i=2;i-) ans.numi-1+=(an

      4、s.numi % 2)*10; ans.numi/=2; ans.num1/=2; if(ans.numans.len=0) ans.len-; return ans; hugeint plustwo(hugeint a) /计算大整数 a 加 2 之后的结果 int i; hugeint ans; ans=a; ans.num1+=2; i=1; while(i=10) ) ans.numi+1+=ans.numi/10; ans.numi%=10; i+; if(ans.numans.len+10) ans.len+; return ans; bool over(hugeint a,hugeint b) / 若大整数 ab 则返回 true ,否则返回 false int i; if(a.lenb.len ) return true; for(i=a.len;i=1;i-) if(a.numib.numi) return true; return false; int main() string s; int i; hugeint target,left,middle,right;

      5、 cins; memset(target.num,0,sizeof(target.num); target.len=s.length(); for(i=1;i=1;i-) cout using namespace std; const int SIZE = 100; int xSIZE, ySIZE, fSIZE; int n, i, j, max_f, ans; int main() cinn; for (i = 1; i xiyi; max_f = 0; for (i = 1; i = max_f) max_f = fi; ans = i; for (i = 1; i #include using namespace std; const int SIZE = 25; bool usedSIZE; int dataSIZE; int n, m, i, j, k; bool flag; int main() cinnm; memset(used, false, sizeof(used); for (i = 1; i = 1; i-) useddatai = false; for (j

      6、 =datai+1; j = ip+1;j-) aj = aj - 1; ai p= temp; NOIP2013-2. 二叉查找树 二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值、小于 其右子树上所有节点的值。试判断一棵树是否为二叉查找树。 输入的第一行包含一个整数 n, 表示这棵树有 n 个顶点, 编号分别为 1, 2, ., n, 其中编号为 1 的为根结点。之后的第 i 行有三个数 value, left_child, right_child,分别表示该节点关键字的值、左子节点的编号、右子节点的编号; 如果不存在左子节点或右子节点,则用 0 代替。输出 1 表示这棵树是二叉查找 树,输出 0 则表示不是。 #include using namespace std; const int SIZE = 100; const int INFINITE = 1000000; struct node int left_child, right_child, value; ; node aSIZE; int is_bst(int root, int lower_bound

      7、, int upper_bound) int cur; if (root = 0) return 1; cur = aroot.value; if (cur lower_bound) for (i = 1; i ai.valueai.left_childai.right_child; cout using namespace std; int delnum(char *s) int i, j; j = 0; for (i = 0; si != 0; i+) if (si 9) sj = si; j+; return j; const int SIZE = 30; int main() char sSIZE; int len, i; cin.getline(s, sizeof(s); len = delnum(s); for (i = 0; i using namespace std; const int SIZE = 100; int matrixSIZE + 1SIZE + 1; int rowsumSIZE + 1SIZE + 1; /rowsumij记录第 i 行前 j 个数的和

      8、 int m, n, i, j, first, last, area, ans; int main() cin m n; for (i = 1; i matrixij; ans = matrix11; for (i = 1; i ans) ans = area; if (area #include usingnamespace std; const intdayNum = -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; int m,offset, i; int main() cin m; cout usingnamespace std; const intMAXN = 1000; int n, i,lbound, rbound, mid, m, count; int xMAXN; int main() cin n m; for(i= 0; i xi; lbound= 0; rbound= m; while(lboundmid) count+; if(count n / 2) lbound = mid + 1; else rboun

      9、d=mid; cout using namespacestd; int readint() int num = 0; / 存储读取到的整数 int negative = 0; / 负数标识 charc; / 存储当前读取到的字符 c =cin.get(); while(c 9) if (c= -) negative = 1; else num=c-0; c =cin.get(); while(c=0 #define MAXN1000000 int n, B, A,MMAXN, CMAXN, l, r, ans, mid; bool check(int nn) intcount = 0, i, j; i = n-nn+1 ; j = 1; while(i x) j-; if (i n B A; for (i= 1; i Mi; for (i= 1; i Ci; sort(M,1, n); sort(C,1, B); l = 0; r = n; while(l = r) mid = (l + r) / 2; if (check(mid) ) ans = mid; l = mid + 1; else r = mid-1 ; cout ans endl; return 0;

      《noip普与组初赛历年试题与答案完善题篇》由会员suns****4568分享,可在线阅读,更多相关《noip普与组初赛历年试题与答案完善题篇》请在金锄头文库上搜索。

      点击阅读更多内容
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.