noip2011普及组初赛答案_NOIP普及组和提高组的区别

noip2011普及组初赛答案_NOIP普及组和提高组的区别NOIP2011普及组初赛15现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、200。那么,“也”字的编码长度是(3)。解析:如图所示23#include<iostream>usingnamespacestd;intmain(){inti,n,m,ans;cin>>n>>m;i=n;

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

NOIP2011普及组初赛

15

现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由 4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为 700、600、300、200。那么,“也”字的编码长度是( 3)。
解析:如图所示在这里插入图片描述

23

#include <iostream>
using namespace std;
int main(){
    int i, n, m, ans;
    cin>>n>>m;
    i = n;
    ans = 0;
    while (i <= m){
        ans += i;
        i++;
    }
    cout<<ans<<endl;
    return 0;
}

输入:
10 20
输出:
165
解析:根据对程序的理解,求10~20的和即可

24

#include <iostream>
#include <string>
using namespace std;
int main(){
    string map = "22233344455566677778889999";
    string tel;
    int i;
    cin>>tel;
    for (i = 0; i < tel.length(); i++)
        if ((tel[i] >= '0') && (tel[i] <= '9'))
            cout<<tel[i];
        else if ((tel[i] >= 'A') && (tel[i] <= 'Z'))
            cout<<map[tel[i] - 'A'];
    cout<<endl;
    return 0;
}

输入:
CCF-NOIP-2011
输出:
22366472011
解析:如果输入的字符是大写字母,就按照字母的顺序在map中找到相对应的数字。如果输入的字符为数字,直接输出即可。

28

(大整数开方)输入一个正整数n(1≤n<10100),试用二分法计算它的平方根的整数部分。

#include <iostream>
#include <string>
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++)
            ①+= a.num[i] * b.num[j];
    for (i = 1; i <= a.len + b.len; i++) {
        ans.num[i + 1] += 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){
    //计算大整数 a 和 b 的和
    int i; hugeint ans;
    memset(ans.num, 0, sizeof(ans.num));
    if (a.len > b.len)
        ans.len = a.len;
    else
        ans.len = b.len;
    for (i = 1; i <= ans.len; i++) {
        ans.num[i] +=③;
        ans.num[i + 1] += ans.num[i] / 10;
        ans.num[i] %= 10;
    }
    if (ans.num[ans.len + 1] > 0) 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.num[i  - 1] += (④) * 10;
        ans.num[i] /= 2;
    }
    ans.num[1] /= 2;
    if (ans.num[ans.len] == 0) ans.len--;
    return ans;
}
hugeint plustwo(hugeint a) {
    //计算大整数 a 加 2 后的结果
    int i; hugeint ans;
    ans = a;
    ans.num[1] += 2;
    i = 1;
    While ((i <= ans.len) && (ans.num[i] >= 10)) {
        ans.num[i + 1] += ans.num[i] / 10;
        ans.num[i] %= 10;
        i++;
    }
    if (ans.num[ans.len + 1] > 0)⑤;
    return ans;
}
bool over(hugeint a, hugeint b){
//若大整数 a>b 则返回 true,否则返回 false
    int i;
    if (⑥) return false;
    if (a.len > b.len) return true;
    for (i = a.len; i >= 1; i--) {
        if (a.num[i] < b.num[i])return false;
        if (a.num[i] > b.num[i]) return true;
    }
    return false;
}
int main(){
    string s;
    int i;
    hugeint target, left, middle, right;
    cin>>s;
    memset(target.num, 0, sizeof(target.num));
    target.len = s.length();
    for (i = 1; i <= target.len; i++)
        target.num[i]= s[target.len  - i] - ⑦;
    memset(left.num, 0, sizeof(left.num));
    left.len = 1;
    left.num[1] = 1;
    right = target;
    do {
        middle = average(left, right);
        if (over(⑧))right = middle;
        else left = middle;
    } while (!over(plustwo(left), right));
    for (i = left.len; i >= 1; i--)
        cout<<left.num[i];
    cout<<endl;
    return 0;
}

解析:空①,分别将乘数的第i位和第j位相乘,所以应填入乘积的i+j-1位。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189969.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mac Catalina安装配置hadoop hive hbase( 完整可用版)

    Mac Catalina安装配置hadoop hive hbase( 完整可用版)

    2021年5月12日
    128
  • CreateThread WaitForMultipleObjects[通俗易懂]

    CreateThread WaitForMultipleObjects[通俗易懂]//最简单的创建多线程实例#include#include//子线程函数DWORDWINAPIThreadFun(LPVOIDpM){printf(“子线程的线程ID号为:%d\n子线程输出HelloWorld\n”,GetCurrentThreadId());return0;}//主函数,所谓主函数其实就是主线程执行的函数。intmain

    2022年7月27日
    9
  • java list 转json 字符串_fastjson将java list转为json字符串

    java list 转json 字符串_fastjson将java list转为json字符串1.直接用fastjson的静态方法stringJSON.toJSONString(list)方法就行,JSON.toJSONString(list)将javalist转为json字符串。2.toJsonString()方法,有两个重载,一个是JSON.toJsonString(list),直接将list转为json字符串:[{\”aid\”:10056,\”content_text\”:\”…

    2022年10月18日
    0
  • linux(6)查看进程ps命令「建议收藏」

    linux(6)查看进程ps命令「建议收藏」ps命令Linuxps(英文全拼:processstatus)命令用于显示当前进程的状态,类似于windows的任务管理器查看所有进程ps-A显示所有进程信息,连同命令行ps-

    2022年7月28日
    1
  • 解决新版chrome跨域问题:cookie丢失以及samesite属性问题「建议收藏」

    解决新版chrome跨域问题:cookie丢失以及samesite属性问题「建议收藏」最近在使用前后端分离开发的时候,遇到了一个诡异的问题,无论如何设置跨域,同一个页面获取到的session始终不一致。发现问题:登录界面前后端分离,ajax提交登录时出错验证码接口和登录接口的session不一致(跨域问题)在网上搜索跨域问题,重新设置,问题依旧错因排除:ajax允许cookie(已经设置xhrFields:{withCredentials:true})springboot尝试设置了多种跨域方法(springboot解决跨域)深入分析:使用其它浏览器(fi

    2022年6月9日
    232
  • Python入门:Anaconda和Pycharm的安装和配置「建议收藏」

    Python入门:Anaconda和Pycharm的安装和配置「建议收藏」子曰:“工欲善其事,必先利其器。”学习Python就需要有编译Python程序的软件,一般情况下,我们选择在Python官网下载对应版本的Python然后用记事本编写,再在终端进行编译运行即可,但是对于我这样懒的小白,我喜欢装一些方便的软件来辅助我编写程序。在学习Java时,正常情况选择安装JDK然后配置环境变量后,用记事本编写程序再在终端编译运行即可,而我一般选择安装JDK+MyEclipse。…

    2022年8月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号