CCF编程能力等级认证GESP—C++3级—20231209

单选题(每题 2 分,共 30 分)

1、下面C++数组的定义中,会丢失数据的是( )。

A. char dict_key[] = {'p','t','o'};
B. int dict_value[] = {33,22,11};
C. char dict_name[]={'chen','wang','zhou'};
D. float dict_value[]={3,2,1};

正确答案:C
A选项:这是正确的。这定义了一个字符数组dict_key,包含三个字符:‘p’、‘t’和’o’。
B选项:这也是正确的。这定义了一个整数数组dict_value,包含三个整数:33、22和11。
C选项:这是错误的。在C中,字符串字面量(如"chen"、“wang”、“zhou”)是由字符数组表示的,并且必须以空字符(‘\0’)结尾。在这个选项中,‘chen’、'wang’和’zhou’都不是有效的字符数组初始化。正确的做法应该是使用字符串字面量,如char dict_name[] = {“chen”, “wang”, “zhou”};,但这会创建一个二维字符数组,而不是一个一维字符数组。如果dict_name应该是一个一维字符数组,那么应该只包含一个字符串,如char dict_name[] = “chen”;。
D选项:这是正确的。这定义了一个浮点数数组dict_value,包含三个浮点数:3.0、2.0和1.0(在C中,整数字面量可以隐式地转换为浮点数)。

2、在下列编码中,不能够和二进制"1101 1101"相等的是( )。

A.22110进制
B.3358进制
C. (dd)16进制
D.5d)16进制

正确答案:D
为了方便计算,我们将所有的数据都转换为10进制数
11011101 ( 2 ) = 1 ∗ 2 7 + 1 ∗ 2 6 + 1 ∗ 2 4 + 1 ∗ 2 3 + 1 ∗ 2 2 + 1 ∗ 2 0 = 128 + 64 + 16 + 8 + 4 + 1 = 221 1101 1101(2) = 1 * 2^7 +1 * 2^6 +1 * 2^4 +1 * 2^3 +1 * 2^2 +1 * 2^0 =128 + 64 + 16 + 8 + 4 + 1 = 221 11011101(2)=127+126+124+123+122+120=128+64+16+8+4+1=221
335 ( 8 ) = 3 ∗ 8 2 + 3 ∗ 8 1 + 5 ∗ 8 0 = 192 + 24 + 5 = 221 335(8) = 3 * 8^2 + 3 * 8^1 + 5 * 8^0 = 192 + 24 + 5 = 221 335(8)=382+381+580=192+24+5=221
d d ( 16 ) = 13 ∗ 1 6 1 + 13 ∗ 1 6 0 = 208 + 13 = 221 dd(16) = 13 * 16 ^ 1 + 13 * 16 ^ 0 = 208 + 13 = 221 dd(16)=13161+13160=208+13=221
5 d ( 16 ) = 5 ∗ 1 6 1 + 13 ∗ 1 3 0 = 80 + 13 = 93 5d(16) = 5 * 16^1 + 13 * 13^0 = 80 + 13 = 93 5d(16)=5161+13130=80+13=93

3、下面C++代码执行后不能输出"GESP"的是( )。

A. string str("GESP"); cout<<str<<endl;
B. string str="GESP"; cout<<str<<endl;
C. string str("GESP"); cout<<str[1]<<str[2]<<str[3]<<str[4]<<endl;
D. string str{"GESP"}; cout<<str<<endl;

正确答案:C
A选项:这个选项创建了一个名为strstring对象,并用"GESP"初始化它。然后,它使用cout输出整个字符串,因此会输出"GESP"。
B选项:这个选项与A选项类似,只是使用了赋值运算符=来初始化str。同样,它会输出整个字符串"GESP"。
C选项:这个选项创建了一个名为strstring对象,并用"GESP"初始化它。然后,它试图输出字符串中的第2、3、4和5个字符(在C++中,字符串的索引从0开始)。但是,由于"GESP"只有4个字符,所以str[4]是越界的,这会导致未定义的行为。因此,这个选项可能不会输出"GESP",而是可能会输出其他内容,或者程序可能会崩溃。
D选项:L这个选项与A和B选项类似,只是使用了花括号{}来初始化str。同样,它会输出整个字符串"GESP"。

4、执行下面C++代码输出是( )。

int temp= 0;
for (int i = 1; i < 7; i++){
	for (int j = 1; j < 5; j++){
		if (i / j == 2){
			temp++;
		}
	}
}
cout << temp << endl; 
A. 10 
B. 8
C. 4
D. 3

正确答案:C

iji / j == 2temp
11false
12false
13false
14false
21true1
22false
23false
24false
31false
32false
33false
34false
41false
42true2
43false
44false
51false
52true3
53false
54false
61false
62false
63true4
64false

5、执行下面C++代码后,输出是( )。

string str = ("chen");
int x = str.length();
int temp = 0;
for (int i = 0; i <= x; i++){
	temp++; 
}
cout << temp << endl;
A. 4
B. 2
C. 5
D. 3

正确答案:C
str = “chen” , x = 4, temp = 0

itemp
01
12
23
34
45

6、执行下面C++代码后输出的是( )。

string str = ("chen");
int x = str.length();
cout << x << endl;
A. 4
B. 3
C. 2
D. 5

正确答案:A
1.string str = ("chen");:这行代码创建了一个string类型的变量str,并用字符串"chen"来初始化它。
2.int x = str.length();:这行代码调用了strlength()成员函数,该函数返回字符串的长度(不包括终止字符’\0’)。字符串"chen"的长度是4,所以x的值被设置为4。
3.cout << x << endl;:这行代码输出变量x的值,也就是4,然后输出一个换行符。

7、执行下面C++代码后输出的是( )。

string str = ("chen");
cout << str[5] << endl;
A. 输出未知的数
B. 输出'n'
C. 输出'\0'
D. 输出空格

正确答案:A
1.string str = ("chen");:这行代码创建了一个string类型的变量str,并用字符串"chen"来初始化它。
2.cout << str[5] << endl;:这行代码试图输出字符串str中索引为5的字符。然而,字符串"chen"只有4个字符,索引从0开始,所以有效的索引范围是0到3。索引5超出了字符串的范围,访问它会导致未定义的行为。
在C++中,字符串通常是以空字符(‘\0’)结尾的,但直接访问超出字符串长度的索引不会返回空字符,而是可能导致访问到内存中的随机数据,这通常是不可预测的。

8、下面C++代码执行后的输出是( )。

char ch[10] = {'1'};
cout << ch[2] << endl;
A. 0
B. 1
C. 输出空格
D. 什么也不输出

正确答案:D
1.char ch[10] = {'1'};这行代码定义了一个字符数组ch,大小为10个字符。然而,只有第一个元素被初始化为字符’1’,其余的元素没有被显式初始化。在C++中,如果局部数组的元素没有被显式初始化,它们的值将是未定义的(通常是垃圾值,即之前存储在内存位置中的值)。
2.cout << ch[2] << endl;这行代码试图输出数组ch中索引为2的字符。由于只有ch[0]被初始化为’1’,而ch[1]和ch[2]等其余元素未被初始化,它们可能包含任何值。访问未初始化的数组元素是未定义行为,这意味着编译器不会给出警告或错误,但结果可能是不可预测的。在实际运行中,这可能会导致程序崩溃,或者输出一个随机的字符,或者什么都不输出。
由于ch[2]是一个未初始化的字符,尝试读取它的值并输出是不安全的。在大多数情况下,这样的代码应该避免,因为它可能导致不可预测的行为。如果数组中的元素没有被全部初始化,那么访问未初始化的元素是未定义行为。

9、下面C++代码用于统计每种字符出现的次数,当输出为3时,横线上不能填入的代码是( )。

string str = "GESP is a good programming test!";
int x = 0;
for (int i = 0; i < str.length(); i++){
	if (____){
		x++;
	}
}
cout << x << endl;
A. str[i]=='o'
B. str[i]=='a'+14
C. str[i]==115
D. str[i]==111

正确答案:C
在这段C++代码中,我们有一个字符串str,并且我们想要计算字符串中某个特定字符出现的次数。循环遍历字符串中的每个字符,并使用if语句来检查字符是否满足某个条件。如果满足条件,则变量x增加1。
A选项:这个条件检查当前字符是否是字母’o’。
B选项:这个条件检查当前字符是否是字母’a’之后的第14个字符,即字母’o’。
C选项:这个条件检查当前字符的ASCII值是否等于115。在ASCII表中,115对应于小写字母’s’。
D选项:这个条件检查当前字符的ASCII值是否等于111。在ASCII表中,111对应于小写字母’o’。

10、32位计算机中,C++的整型变量int能够表示的数据范围是( )。

A. 2^31~(2^31)-1
B. 2^32
C. -2^31~+(2^31)-1
D. -(2^31)+1~2^31

正确答案:C
在32位计算机中,C++的整型变量int通常使用32位(4字节)来存储。这32位可以分为符号位和数值位。对于int类型,通常使用1位作为符号位(0表示正数,1表示负数),剩下的31位用于表示数值。
因此,int类型可以表示的数据范围是从 − 2 31 -2^{31} 231 2 31 − 1 2^{31}-1 2311。这是因为:
1.对于正数,最大的数值是当所有数值位都为1时,即 2 31 − 1 2^{31}-1 2311
2.对于负数,最小的数值是当符号位为1,所有数值位都为0时,即 − 2 31 -2^{31} 231

11、 下面C++程序执行的结果是( )。

int cnt = 0;
for (int i = 0; i <= 20; i++){
	if (i % 3 == 0 && i % 5 == 0){
		cnt++; 
	} 
}
cout << cnt;
A. 2
B. 3
C. 5
D. 4

正确答案:A

ii % 3 == 0 && i % 5 == 0cnt
0true1
1false
2false
3false
14false
15true2
16false
19false
20false

12、C++的数据类型转换让人很难琢磨透,下列代码输出的值是( )。

int a = 3;
int b = 2;
cout << a / b * 1.0 << endl; 
A. 1.5
B. 1
C. 2
D. 1.50

正确答案:B
在C++中,整数除法会向下取整,不会进行浮点数的除法运算。因此,当执行a / b时,由于ab都是整数,所以结果也是整数。在这种情况下,3 / 2的结果是1
接下来,1乘以1.0会得到1.0,因为任何整数乘以一个浮点数都会得到一个浮点数。但是,由于cout在默认情况下会输出浮点数的小数部分,如果小数部分是0,则不会显示。
因此,cout << a / b * 1.0 << endl;的输出结果是1

13、C++代码用于抽取字符串中的电话号码。约定:电话号码全部是数字,数字之间没有其他符号如连字符或空格等。代码中变量strSrc仅仅是示例,可以包含更多字符。下面有关代码说法,正确的说法是( )。

string strSrc = "红十字: 01084025890火警电话: 119急救电话: 120紧急求助: 110";
string tel = "";
for (int i = 0; i <= strSrc.length(); i++){
	if (strSrc[i] >= '0' && strSrc[i] <= '9'){
		tel = tel + strSrc[i];
	}else if (tel != ""){
		cout << tel << endl;
		tel = "";
	}
}
A. 代码将换行输出各个含有数字的电话号码。
B. 代码将不换行输出各个含有数字的电话号码,号码中间没有分隔。
C. 代码将不换行输出各个含有数字的电话号码,号码中间有分隔。
D. 不能够输出数字电话号码。

正确答案:A
代码逻辑:
1.遍历字符串strSrc的每个字符。
2.如果当前字符是数字(在'0''9'之间),则将其添加到tel字符串中。
3.如果当前字符不是数字,并且tel字符串不为空(即已经收集了一些数字),则输出tel字符串并清空它。
注意:代码中存在一个逻辑错误。循环条件i <= strSrc.length()会导致在字符串的末尾多执行一次循环,此时strSrc[i]是字符串结束符\0,这会导致程序尝试访问一个不存在的字符,从而引发未定义行为。

14、某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。( )

A. 麦克风
B. 扬声器
C. 油量表
D. 传感器

正确答案:C
A选项:用于接收乘客的语音指令,这是声控系统的核心输入设备,所以它是必须的。
B选项:虽然主要用于向乘客提供信息或反馈,但在某些情况下,它也可能用于与其他车辆或基础设施进行通信。然而,对于基本的选路功能来说,它并不是必需的。
C选项:这个组件主要用于监控车辆的燃油或电力水平,以确保车辆有足够的能量到达目的地。虽然这对于车辆的安全运行是重要的,但它与选路功能本身没有直接关系。
D选项:这些设备对于无人驾驶车辆至关重要,因为它们提供了关于车辆周围环境的信息,如其他车辆、行人、道路标志等。这对于自动选择优化路线是必要的。

15、现代计算机是指电子计算机,它所基于的是( )体系结构。

A. 艾伦·图灵
B. 冯·诺依曼
C. 阿塔纳索夫
D. 埃克特-莫克利

正确答案:B
现代计算机,也就是电子计算机,主要是基于冯·诺依曼(John von Neumann)提出的计算机体系结构来设计和制造的。这一体系结构主要包括存储程序、程序由指令序列构成、采用二进制、指令和数据存储按地址访问、指令和数据以二进制形式存储在存储器中、以运算器为中心等思想。
A. 艾伦·图灵(Alan Turing):图灵是英国数学家、逻辑学家,被认为是计算机科学之父和人工智能之父,他对计算机科学的贡献主要是在算法、逻辑和人工智能方面,而非计算机体系结构。
B. 冯·诺依曼(John von Neumann):他是匈牙利裔美国数学家、物理学家、计算机科学家和发明家,被誉为“现代电子计算机之父”和“博弈论之父”。他提出的计算机体系结构是现代计算机设计的基础。
C. 阿塔纳索夫(John Atanasoff):他是一位美国的物理学家和发明家,与助手克利福德·贝里(Clifford Berry)一起被认为是电子计算机的发明者之一,但他们的工作并没有像冯·诺依曼的体系结构那样对后来的计算机设计产生深远影响。
D. 埃克特-莫克利(Eckert-Mauchly):他们是一对美国的工程师和发明家,合作开发了世界上第一台全电子通用计算机ENIAC(Electronic Numerical Integrator and Computer)。然而,他们的计算机并没有明确采用冯·诺依曼体系结构,而且他们的主要贡献是在工程实现方面。

判断题(每题 2 分,共 20 分)

1、执行C++代码 cout<<(5&&2)<<endl; 后将输出 1 。( )

正确答案:正确
在C++中,&& 是逻辑与操作符,它会对两边的表达式进行逻辑判断。因为 5 和 2 都是非零值(在逻辑上被视为真),所以 5 && 2 的结果是 true,在C++中,true 被转换为整型时值为1,所以输出的是 1。

2、C++程序执行后,输入 chen a dai 输出应该为: chen 。( )

string str;
cin >> str;
cout << str;

正确答案:正确
在C++中,cin >> str; 会读取到空格为止,所以输入 “chen a dai” 时,str 将只包含 “chen”。因此,输出也只会是 “chen”,不包括后面的空格和剩余的输入。

3、执行C++代码 cout<<(5||2); 后将输出 1 。( )

正确答案:正确
在C++中,|| 是逻辑或操作符。因为 5 和 2 都是非零值(在逻辑上被视为真),所以 5 || 2 的结果也是 true,在C++中,true 被转换为整型时值为1,所以输出的是 1。

4、执行下面C++代码后将输出"China"。( )

string a = "china";
a.replace(0, 1, "C");
cout << a << endl;

正确答案:正确
replace 函数会替换字符串中指定位置的子串。这里,它将从位置 0 开始,长度为 1 的子串(即 “c”)替换为 “C”。所以,字符串 “china” 变成了 “China”,输出确实是 “China”。

5、执行C++代码将输出 0 5 , 5 之后还有一个空格。( )

int list[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < 10; i++){
	if (i % 5 == 0){
		cout << list[i] << " ";
	}
}

正确答案:错误
这段代码会遍历数组 list,并输出索引是5的倍数的元素值,后面跟着一个空格。但是,索引是从0开始的,所以当 i 为 0 时,i % 5 也为 0,此时会输出 list[0] 的值,即 1,后面跟着一个空格。然后,当 i 为 5 时,会输出 list[5] 的值,即 6,后面也跟着一个空格。因此,输出将是 1 6 (注意,结尾有一个空格),而不是 0 5 (且结尾还有一个空格)。

6、下面C++代码将输出1( )

int list[10] = {1};
cout << list << endl;

正确答案:错误
在C++中,不能直接使用cout << list << endl;来输出整个数组的内容。这样做会输出数组的首地址,而不是数组元素的值。要输出数组元素的值,需要使用循环遍历数组或者使用标准库中的算法。

7、下面C++程序将输出1。( )

int arr[10] = {1};
cout << arr[0] << endl;

正确答案:正确
arr[0]表示数组arr的第一个元素,其值为1。因此,cout << arr[0] << endl;将输出1。

8、执行C++代码,将输出 1 3 5 7 9 , 9 之后还有一个空格。( )

int list[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < 10; i += 2){
	cout << list[i] << " ";
}

正确答案:正确
这段代码使用了一个for循环,从数组list的第一个元素开始,每次递增2个索引,直到遍历完整个数组。因此,它将输出数组中的奇数元素,即1 3 5 7 9,并且在9之后还有一个空格。

9、小杨最近在准备考GESP,他用的Dev C++来练习和运行程序,所以Dev C++也是一个小型操作系统。( )

正确答案:错误
Dev C是一个集成开发环境(IDE),用于编写、编译和运行C/C++程序。它并不是一个小型操作系统。操作系统是计算机的基本软件,负责管理计算机的硬件和软件资源,而IDE只是开发软件的一个工具。

10、任何一个while循环都可以转化为等价的for循环( )。

正确答案:正确
在C++中,任何一个while循环都可以转化为等价的for循环,反之亦然。while循环的基本结构是“当条件为真时执行循环体”,而for循环则提供了初始化、条件和迭代三个部分,可以模拟while循环的行为。

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

小猫分鱼

【问题描述】
海滩上有一堆鱼, N 只小猫来分。第一只小猫把这堆鱼平均分为 N 份,多了i < N 个,这只小猫把多的 i 个扔入海中,拿走了一份。第二只小猫接着把剩下的鱼平均分成 N 份,又多了 i 个,小猫同样把多的 i 个扔入海中,拿走了一份。第三、第四、……,第 N 只小猫仍是最终剩下的鱼分成 N 份,扔掉多了的 i 个,并拿走一份。

编写程序,输入小猫的数量 N 以及每次扔到海里的鱼的数量 i ,输出海滩上最少的鱼数,使得每只小猫都可吃到鱼。

例如:两只小猫来分鱼 N = 2 ,每次扔掉鱼的数量为 i = 1 ,为了每只小猫都可吃到鱼,可令第二只小猫需要拿走1条鱼,则此时待分配的有3条鱼。第一只小猫待分配的鱼有3 * 2 + 1 = 7 条。
【输入描述】
总共 2 行。第一行一个整数N ,第二行一个整数i 。
保证 0 < N < 10; i < N;
【输出描述】
一行一个整数,表示满足要求的海滩上最少的鱼数。
【特别提醒】
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
【样例输入 1】
2
1
【样例输出 1】
7
【样例输入 2】
3
1
【样例输出 2】
25
【样例解释 2】
三只小猫来分鱼N = 3 ,每次扔掉鱼的数量为i = 1 ,为了每只小猫都可吃到鱼,可令第三只小猫需要拿走3条鱼(拿走1条和2条不满足要求),则此时待分配的有10条鱼。第二只小猫待分配的鱼有10 * 3 / 2 + 1 = 16 条。第一只小猫待分配的鱼有16 * 3 / 2 + 1 = 25 条。

#include <iostream>
/*
2 1 7
两只猫,仍1条鱼
第二只猫面前有:1条/份 + 1条/份 + 1扔 (共计3条鱼)
第一只猫面前有:x条/份 + x条/份 + 1扔
             其中第二只猫面前有的鱼应该是减掉第一只猫的1份+扔掉的
             因此 x = 3
所以第一只猫面前有: 3条/份 + 3条/份 + 1扔 = 7条鱼
 */
/*
3 1 25
假设最后一只猫面前有1条鱼
 第三只猫面前有:1条/份 + 1条/份 + 1条/份 + 1扔  (共计4条鱼)
 第二只猫面前有:x条/份 + x条/份 + x条/份 + 1扔
              其中第三只猫面前有的鱼应该是减掉第二只猫的1份+扔掉的1
              因此 x + x = 4; x = 2
              2条/份 + 2条/份 + 2条/份 + 1扔 (共计7条鱼)
 第一支猫面前有:x条/份 + x条/份 + x条/份 + 1扔
             其中第二只猫面前有的鱼应该是减掉第一只猫的1份+扔掉的1
              因此 x + x = 7; 除不开,因此不成立。
 
 假设最后一只猫面前有2条鱼
  第三只猫面前有:2条/份 + 2条/份 + 2条/份 + 1扔  (共计7条鱼)
  第二只猫面前有:x条/份 + x条/份 + x条/份 + 1扔
               其中第三只猫面前有的鱼应该是减掉第二只猫的1份+扔掉的1
               因此 x + x = 7; 除不开,因此不成立。
               2条/份 + 2条/份 + 2条/份 + 1扔 (共计7条鱼)

 假设最后一只猫面前有3条鱼
  第三只猫面前有:3条/份 + 3条/份 + 3条/份 + 1扔  (共计10条鱼)
  第二只猫面前有:x条/份 + x条/份 + x条/份 + 1扔
               其中第三只猫面前有的鱼应该是减掉第二只猫的1份+扔掉的1
               因此 x + x = 10; x = 5
               5条/份 + 5条/份 + 5条/份 + 1扔 (共计16条鱼)
  第一支猫面前有:x条/份 + x条/份 + x条/份 + 1扔
              其中第二只猫面前有的鱼应该是减掉第一只猫的1份+扔掉的1
               因此 x + x = 16; x = 8
               8条/份 + 8条/份 + 8条/份 + 1扔
 */

using namespace std;

/*
 1.mianqian = meifen * n + i; 放在循环里面会超时
 2.输出如果放在循环里面也会超时
 
 */

int main() {
    int n, i, meifen = 1;
    int mianqian;
    cin >> n >> i; // n只猫, 扔i条鱼
    while (true){
        bool is_f = true;
        mianqian = meifen * n + i; // 最后一只猫面前的数量
        for (int j = 1; j < n; j++){
            if (mianqian % (n - 1) != 0){ // 份数不能被整除
                is_f = false;
                meifen++;
                break;
            }else{ // 份数能被整除,满足条件
                mianqian = mianqian / (n - 1) * n + i;
            }
        }
        if (is_f){
            cout << mianqian << endl;
            return 0;
        }
            
    }
    return 0;
}

单位转换

【问题描述】
小杨这周的数学作业是做单位转换,喜欢编程的小杨决定编程帮他解决这些问题。
小杨只学了长度单位和重量单位,具体来说:
长度单位包括千米( km )、米( m )、毫米( mm ),它们之间的关系是:1km = 1000m = 1000000 mm 。
重量单位包括千克( kg )、克( g )、毫克( mg ),它们之间的关系是: 1kg = 1000kg = 1000000 mg。
小杨的作业只涉及将更大的单位转换为更小的单位,也就是说,小杨的作业只会包含如下题型:米转换为毫米,千米转换为毫米,千米转换为米,克转换为毫克,千克转换为毫克,千克转换为克。
现在,请你帮忙完成单位转换的程序。
【输入描述】
输入的第一行为一个整数 N ,表示题目数量。
接下来 N 行,每行一个字符串,表示转换单位的题目,格式为 x 单位1 = ? 单位2 。其中, x 为一个不超过的非负整数, 单位1 和 单位2 分别为两个单位的英文缩写,保证它们都是长度单位或都是重量单位,且 单位1 比 单位2 更大。
例如,如果题目需要你将 1km 转换为 mm,则输入为 1 km = ? mm 。
保证 1 <= N <= 1000。
【输出描述】
输出 N 行,依次输出所有题目的答案,输出时,只需要将输入中的 ? 代入答案,其余部分一字不差地输出即可。
由于小杨的题目只涉及将更大的单位转换为更小的单位,并且输入的 x 是整数,因此答案一定也是整数。
例如,如果题目需要你将1km 转换为mm ,输入为 1 km = ? mm ,则你需要输出 1 km = 1000000 mm 。
【特别提醒】
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。输入格式将严格按照题目要求,且你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
【样例输入 1】
2
1 km = ? mm
1 m = ? mm
【样例输出 1】
1 km = 1000000 mm
1 m = 1000 mm
【样例输入 2】
5
100 m = ? mm
1000 km = ? m
20 kg = ? g
200 g = ? mg
0 kg = ? mg
【样例输出 2】
100 m = 100000 mm
1000 km = 1000000 m
20 kg = 20000 g
200 g = 200000 mg
0 kg = 0 mg

#include <iostream>  

using namespace std;  

int main() {  
    int n, a, b, ans;
    string zd, d, w, yd;
    cin >> n;
    for(int i = 1; i <= n; i++){
    	cin >> a >> zd >> d >> w >> yd;
    	if (zd[0] == 'k'){ // k单位 
			if(yd.size() == 1){
				ans = a * 1000;
			}else{
				ans = a * 1000000;
			}
		}else{ // 非k单位 
			ans = a * 1000; 
		}
		cout << a << ' ' << zd << " = " << ans << ' ' << yd << endl;
	}
    return 0;  
}
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青岛少儿编程-王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值