欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

2023年 9月 GESP C++ 三级真题解析 编程题

时间:2024-05-21 14:50 作者:lizq 点击:
三、编程题(每题 25 分,共 50 分) 1、⼩杨的储蓄 问题描述 ⼩杨共有 N个储蓄罐,编号从0到N-1。从第1天开始,⼩杨每天都会往存钱罐里存钱。具体来说,第i天他会挑选一个存钱罐ɑ

三、编程题(每题 25 分,共 50 分)

1、⼩杨的储蓄
问题描述
⼩杨共有 N个储蓄罐,编号从0到N-1。从第1天开始,⼩杨每天都会往存钱罐里存钱。具体来说,第i天他会挑选一个存钱罐ɑi,并存⼊i元钱。过了D天后,他已经忘记每个储蓄罐里都存了多少钱了,你能帮帮他吗?

输入描述
输⼊2⾏,第一行两个整数N,D;第二行D个整数,其中第i个整数为ɑi(保证0≤ɑi≤N-1)。
每⾏的各个整数之间⽤单个空格分隔。
保证1≤N≤1000 ;1≤D≤1000
输出描述
输出N个用单个空格隔开的整数,其中第i个整数表示编号为i-1的存钱罐中有多少钱(i = 1,...,N)。
样例输入1

2 3
0 1 0

样例输出1

4 2


样例解释1

小杨在第1天、第2天、第3天分别向0号、1号、0号存钱罐存了1元钱、2元钱、3元钱,因此0号存钱罐有1+3=4元钱,而1号存钱罐有2元钱。

样例输入2

3 5
0 0 0 2 0

样例输出2

11 0 4

【题目大意】
1.小杨有n个存钱罐,存钱罐的编号是0~n-1。例如他有5天,每天向某个存钱罐存放i元钱,即:第1天,i=1;第2天,i=2,依次类推。

【考纲知识点】
1.基本运算、输入输出语句、一维数组的知识。
【解题思路】
1.按题目要求定义好需要的变量,并实现输入;
2.根据题意,最多有1000个存钱罐,建立存钱数组,数组大小大于等于1000即可。要存d天,存的元数分别是1~d元,循环范围最好写成i=1;i<=d;
3.每次存钱前,先读入要存的存钱罐编号,然后将i累加到该存钱罐中;
4.最后,输出每个存钱罐中的元数。注意存钱罐的编号是0~n-1。

【参考程序】

#include <iostream>
using namespace std;

int jar[1000];
int main(){
    int n=0, d=0;
    cin >> n >> d;
    for(int i=0; i <n; i++)
        jar[i]= 0;
    for(int i=1;i<=d;i++){
        int a=0;
        cin >>a;
        jar[a]+=1;
    }
    cout << jar [0];
    for(int i=1; i<n; i++)
        cout<<" "<< jar[i];
    cout << endl;
    return 0;
}

2、进制判断
问题描述
N进制数指的是逢N进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母A至F表示十至十五)。现在有N个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,15A6F就只可能是十六进制,而1011则是四种进制皆有可能

输入描述
输入的第一行为一个十进制表示的整数N。接下来 N行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,且不以0 开头。保证不会出现空行。
保证 1≤N≤1000,保证所有字符串长度不超过10。
输出描述
输出N行,每行4个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数十六进制数。使用 1 表示可能,使用0 表示不可能。
例如,对于只可能是十六进制数的 15A6F,就需要输出0001;而对于四者皆有可能的 1011,则需要输出1111。
样例输入1

2
15A6F
1011

样例输出1

0 0 0 1
1 1 1 1


样例输入2

4
1234567
12345678
FF
GG


样例输出2

0 1 1 1
0 0 1 1
0 0 0 1
0 0 0 0


【题目大意】
1.输入多个字符串,每个字符串包括09、‘A’‘Z’这些字符构成,判断能否可能是二进制、八进制、十进制和十六进制,有可能哪个进制都不是。

【考纲知识点】
1.多层循环结构、基本运算、输入输出语句、字符。
【解题思路】
1.根据进制知识,二进制由0和1,构成;八进制由07构成;十进制由09构成;十六进制由09和AF构成。如果字符中有大于1的字符,肯定不能用二进制表示;大于7的,不能用二进制和八进制表示;大于9的,不能用二进制、八进制和十进制表示;大于F的,不能用二进制、八进制、十进制和十六进制表示;2.找出字符串中最大的那个字符,分别和1,8,9,F比较,如果小于等于,就可以用二进制、八进制、十进制或十六进制表示,否则不能表示。

【参考程序】

#include <iostream>
using namespace std;
int main(){
    int n=0;
    cin >> n;
    for(int i=0;i<n;i++){
        char str[11];
        cin >> str;
        char max='0';
        for(int i=0;str[i]!='\0';i++)
            if(str[i]>max) 
                max = str[i];
        cout <<(max <='1')<< " " <<(max <= '7')<< " " <<(max <= '9')<< " " <<(max<='F')<< endl;
    }
    return 0;
}


(责任编辑:lizq)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%