NOIP2011普及组复赛解题报告_东北师大附中.pdf

NOIP2011普及组复赛解题报告_东北师大附中.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NOIP2011普及组复赛解题报告_东北师大附中

NOIP 2011 普及组复赛 解题报告 (C++) 吉林省 东北师大附中 高一 王赢绪 中文题目名称 数字反转 统计单词数 瑞士轮 表达式的值 英文题目与子目录名 reverse stat swiss exp 可执行文件名 reverse stat swiss exp 输入文件名 reverse.in stat.in swiss.in exp.in 输出文件名 reverse.out stat.out swiss.out exp.out 每个测试点时限 1 秒 1 秒 1 秒 1 秒 测试点数目 10 10 10 10 每个测试点分值 10 10 10 10 附加样例文件 有 有 有 有 结果比较方式 全文比较 (过滤行末空格及文末回车) 题目类型 传统 传统 传统 传统 //第一题 数字反转: 很简单的模拟:直接以字符串读入,如果原数是小于零的,就先输出一个负号。接着从字符串的 末尾找到第一个不为‘0’的从这里开始输出到头,如果有负号,就输出到头的前一个。 时间复杂度 O(1) //第一题 参考程序段: #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <stdlib.h> #include <math.h> using namespace std; char num[100]; int a,b; int main() { freopen ("reverse.in","r",stdin); freopen ("reverse.out","w",stdout); cin>>num; if (num[0]=='-'){ 第 1 页 共 8 页 cout<<"-"; a=1;} for (int i=strlen(num)-1;i>=a;i--) { if (num[i]!='0') { b=i; break;} } for (int i=b;i>=a;i--) cout<<num[i]; return 0; } //第二题 统计单词数: 首先应该注意到这个题目的第一个陷阱:由于我用的检查原理是把要找的单词带回原文,如果全 字匹配就说明找到,下面举例说明: 如果要找的单词长度为n ,设原文为一个由m 的字符数组组成的单词,如果从第i 个位置开始查 找,则要求保证m[i]到m[i+n-1]都与远串符合,不过这是远远不够的,还要保证m[i-1]和m[i+n]都是 空格或者空字符,因为题里说了要是一个单独的单词,不能是一个单词的一部分。读入的时候要全文 读入,从m[1]开始读入,假设原文的长度为k,则应该读入到m[k] 。然后把m[0]和m[k+1]都换成空格, 我是这样做的。其实如果不换这两个,也可以得满分,但是换了更保险。 设原文长度为m 要找的单词长度为k: 时间复杂度: < O(m*k) 找的时候找到第一个不符合要求的字符就break 可以优化时间复杂度 空间复杂度:

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档