- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NOIP普及组初赛历年试题及答案完善题篇
NOIP 普及组初赛历年试题及答案(完善题篇)
2-4 28
完善程序,每年两题,每题每空 分,共 分。
【解题步骤】
1、仔细读题,尤其是题目给你的解题思路:解决什么问题?用的什么算法?输
入输出是什么?……
2、要知道变量的含义,也可通过变量单词的意思知道,比如sum表示和,que
表示队列等等。
3、在充分了解前两点的基础上,先根据自己的想法大致想想:如果让你实现程
序,你会怎么做。
4、通读程序,理顺程序结构,千万不要因为程序很长而觉得气馁,有时程序越
长,填空越简单。
5、按照程序执行的顺序做,遇到难的先放一边,继续往下做。有些空格很简单,
一下就能看出来的。
6、到这步为止,程序大概意图就知道了,然后就是填比较难的几格了。这一点
就靠你对程序的理解了。
7、填完了以后,再执行一遍程序,有样例就结合样例,没样例就自己造数据模
拟。
【解题技巧】
1、变量初始化:这个得结合后面的运算确定,不过有些也很简单,如sum 0
之类的。
2 for
、 循环初、终值:如果是嵌套的循环,可结合父循环或子循环确定。
3、更新最优解:比较或赋值。
4、要填的空格与某句对应,这样的例子在下面能找到很多。
NOIP2011-1.子矩阵
n1*m1 a n2*m2 b a
给输入一个 的矩阵 ,和 的矩阵 ,问 中是否存在子矩阵和
b 相等。若存在,输出所有子矩阵左上角的坐标若不存在输出: “There isno
answer”。
#includeiostream
using namespace std;
const int SIZE 50;
int n1,m1,n2,m2,a[SIZE][SIZE],b[SIZE][SIZE];
int main()
{
int i,j ,k1,k2;
bool good ,haveAns;
cinn1m1;
for(i 1;i n1;i++)
for(j 1;j m1;j ++)
cina[i][j];
cinn2m2;
for(i 1;i n2;i++)
for(j 1;j m2;j ++)
cinb[i][j];
haveAns false;
for(i 1;i n1-n2+1;i++)
for(j 1;j m1-m2+1;j ++){
good true;
for(k1 1;k1 n2;k1++)
for(k2 1;k2 m2;k2++){
if(a[i+k1-1][j +k2-1]! b[k1][k2])
good false;
}
if(good){
coutij endl;
haveAns true;
}
}
if(!haveAns)
coutThereis no answerendl;
return 0;
}
NOIP2011-2. 大整数开方
输入一个正整数n ( 1≤n≤10^100),试用二分法计算它的平方根的整数部分。
#includeiostream
#includestring
using namespace std;
const int SIZE 200;
struct hugeint{
int len,num[SIZE];
};
// 其中len 表示大整数的位数; num[1] 表示个位,num[2] 表示十位,以此类推
hugeint times(hugeint a,hugeint b)
// 计算大整数a 和b 的乘积
{
int i,j;
hugeint ans;
memset(ans.num,0,sizeof(ans.num));
for(i 1;i a.len;i++)
for(j 1;j b.len;j ++)
ans.num[i+j -1]+ a.num[i]*b.num[j];
for(i 1;i a.len+b.len;i++){
ans.num[i+1]+ ans.num[i]/10;
ans.num[i]% 10;
}
if(ans.num[a.len+b.len]0)
ans.len a.len+b.len;
else
ans.len a.len+b.len-1;
return ans;
}
hugeint add(hugeint a,hugeint b)
计
文档评论(0)