ICode—1级训练场(基础训练1)参考答案(python版)
编写第一个C++程序
GESP考试界面参考
数据类型
C++中的变量
一、说明
C++对于数据的操作有直接输出类型的,也有经过“包装”类型的。直接输出类型的是我们前面学习的方式,比如下面这样:
1.数字直接参与运算的
#include<iostream> using namespace std; int main(){ cout<<1+2<<endl; //3 cout<<3-1<<endl; //2 return 0; }2.输出字符的
#include<iostream> using namespace std; int main(){ cout<<'a'<<endl; //a cout<<'b'<<endl; //b return 0; }3.输出字符串的
#include<iostream> using namespace std; int main(){ cout<<"hello"<<endl; //hello cout<<"你好"<<endl; //你好 return 0; }除了上面的直接操作,我们还可以通过其他方式,最常见的就是变量和常量。
例子 1:买菜记账(存储 + 复用数据)
例子 2:调空调温度(动态修改数据)
例子 3:快递柜取件(内存地址 + 变量名)
例子 4:分类放书包(类型约束)
核心总结
二、变量
变量就是能变化的量。特点就是“喜新厌旧”。
变量的的使用及其取值范围由它的类型决定,常见的变量类型及其取值范围可以参考前面这篇文章:C++ 数据类型深度指南:整型 / 浮点型 / 构造类型定义及使用
变量的定义方式如下:
数据类型说明符 变量名1,变量名2,变量名3......变量名n;
比如
int a,b;
上面这行代码表示定义了两个整型变量,名字分别是a和b,没有赋初值。
如果是赋初值的情况,下面这个例子
int a=1;
上面这个例子就是定义了一个整型变量,并赋初值为1
一个综合的例子如下:
#include<iostream> using namespace std; int main(){ int a; //定义了一个整型变量a,没有赋值 int b,c=1; //定义了两个整型变量b,c。c赋初值1 double d=0.2; //定义了一个浮点型变量,初值是0.2 bool x=true; //定义了一个bool型变量,初值是true char k='g'; //定义了一个char型变量,初值是g return 0; }如果对上面的内容进行输出
#include<iostream> using namespace std; int main(){ int a; //定义了一个整型变量a,没有赋值 int b,c=1; //定义了两个整型变量b,c。c赋初值1 double d=0.2; //定义了一个浮点型变量,初值是0.2 bool x=true; //定义了一个bool型变量,初值是true char k='g'; //定义了一个char型变量,初值是g //测试输出 cout<<"a="<<a<<endl; //a=4254665,没有赋初值,是随机数 cout<<"b="<<b<<",c="<<c<<endl;//b=0,c=1。 b没有赋值,随机0 cout<<"d="<<d<<endl;//d=0.2 cout<<"x="<<x<<endl;//x=1 cout<<"k="<<k<<endl;//k=g cout<<t<<endl; //编译不通过,提示变量t不存在(因为前面没定义) return 0; }总结:
数据类型说明符,决定了变量所存储的数据种类,可根据实际情况进行选择,可以是int、char、double等数据类型,也可以是struct等构造数据类型
变量定义通常在的开头位置,定义同类型的多个变量时,变量之间用逗号分隔,定义哥语句的末尾用分号结束。
变量必须先定义后使用,没有定义变量直接使用会报错。
变量的命名方式有严格要求:
(1)只能由字母(大小写都可以)、数字、下滑线组成
(2)不能以数字开头
(3)不能是关键字
【解释】什么是关键字? 用通俗的话讲,C++ 的关键字就是「编程语言官方规定的 “专用词”」—— 这些词有固定的含义和用途,是编译器能 “看懂” 的 “指令词汇”, 你不能把它们当变量名、函数名随便用,就像生活里的 “专用名词 / 规则术语”,不能乱改、乱用作其他用途。 基础常用的关键字:int float char double if else for while return const void class struct bool break continue static new delete 等。
在DevC++中,关键字会变黑色,比如下面这样,可以看到int,double都变黑了,而dog没有变黑
【题解】解密
【题目描述】
给定一个正整数k,有k次询问,每次给定三个正整数ni,ei,di,求两个正整数pi,qi。
使ni=pi * qi, ei * di =(pi -1) *(qi-1) + 1
【输入描述】
第一行一个正整数k,表示有k次询问。
接下来k行,第i行三个正整数ni,di,ei。
【输出描述】
输出k行,每行两个正整数pi,qi表示答案。
为使输出统一,你应保证pi<=qi。
如果无解,请输出NO。
【样例输入】
10 770 77 5 633 1 211 545 1 499 683 3 227 858 3 257 723 37 13 572 26 11 867 17 17 829 3 263 528 4 109
【样例输出】
2 385 NO NO NO 11 78 3 241 2 286 NO NO 6 88
【数据范围】
m=n-e*d +2
保证对于100的数据,1<=k<=10^5,对于任意的1<=i<=k,1<=ni<=10^18,
1<=ei*di<=10^18, 1<=m<=10^9
【算法】走迷宫
【题目描述】
一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。
【输入描述】
第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40)
接下来是R行,每行C个字符,代表整个迷宫。
空地格子用‘.’表示,有障碍物的格子用‘#’表示。
迷宫左上角和右下角都是‘.’。
【输出描述】
输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。
【样例输入】
5 5 ..### #.... #.#.# #.#.# #.#..
【样例输出】
9
【算法】最短路径
【题目描述】
下图表示从城市A到城市H的交通图。从图中可以看出,从城市A到城市H要经过若干个城市。现在找出一条经过城市最少的一条路线。
【输入描述】
第一行一个整数n,表示几个城市。
接下来2~n+1行,表示两个城市之间的关系(能否直达)
【输出描述】
倒序输出城市最短线路中间用”-“隔开
【样例输入】
8 1 0 0 0 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 0 0 0 1 1 1 1 1 0 1 1 1 0 0 1 1 0 1 1 1 1 0 0 0 1
【样例输出】
H-F-A
【算法】最少步数
【题目描述】
在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知道这件事后觉得很有趣,就想试一试,在一个(100×100)的围棋盘上任选两点A、B,A点放上黑子,B点放上白子,代表两匹马。棋子可以按“日”字走,也可以按“田”字走,俩人一个走黑马,一个走白马。谁用最少的步数走到左上角坐标为(1,1)的点时,谁获胜。现在他请你帮忙,给你A、B两点的坐标,想知道两个位置到(1,1)点可能的最少步数。
【输入描述】
A、B两点的坐标。
【输出描述】
最少步数
【样例输入】
12 16 18 10
【样例输出】
8 9