三、编程题(每题 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) |