【洛谷OJ C++】洛谷题单100 入门1顺序结构 题解及学习笔记

洛谷平台题单100链接:https://www.luogu.com.cn/training/100#problems

目录

学习笔记:

P1001 A+B Problem

P1000 超级玛丽游戏

P5703 【深基2.例5】苹果采购

P5704 【深基2.例6】字母转换

P5705 【深基2.例7】数字反转

P5706 【深基2.例8】再分肥宅水

P1425 小鱼的游泳时间

P2433 【深基1-2】小学数学 N 合一

P5708 【深基2.习2】三角形面积

P1421 小玉买文具

P5709 【深基2.习6】Apples Prologue

P2181 对角线

P5707 【深基2.例12】上学迟到

P3954 [NOIP 2017 普及组] 成绩


学习笔记:

p1000 超级玛丽 

Question1:直接粘贴超级玛丽图案会报错,为什么?

【洛谷OJ C++】洛谷题单100 入门1顺序结构 题解及学习笔记_第1张图片

Answer:猜想:cout 不支持字符串的换行行为,经hello world测试已证实。

【洛谷OJ C++】洛谷题单100 入门1顺序结构 题解及学习笔记_第2张图片

P5704 【深基2.例6】字母转换

Question2:ASCII码的作用?char字符型变量的存储方式?

Answer:

ASCII,英文全称是American Standard Code for Information Interchange,中文名称就是美国信息互换标准代码,他是基于拉丁字母的一套电脑编码系统。ASCII码表主要用于显示现代英语和其他西欧语言。

ASCII码大致可以分作三部分组成,第一部分是ASCII非打印控制字符,第二部分是ASCII打印字符,第三部分是扩展ASCII打印字符。

( https://blog.csdn.net/bisal/article/details/106088569)

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0)。
例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示。
而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码)。
而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
美国信息交换标准代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,是一种标准的单字节字符编码方案,用于基于文本的数据。
(原文链接:https://blog.csdn.net/zhangnipa/article/details/108764205)

在C语言中,char型数据是将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。

字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5 是不同的。'5'是字符型数据,不能参与运算。

(原文链接:https://blog.csdn.net/weixin_34043312/article/details/117014304)

P5705 【深基2.例7】数字反转

这道题用了算术运算符取余的方法,做完了以后看了一下题解,还有更巧妙的char+scanf输入方法

【洛谷OJ C++】洛谷题单100 入门1顺序结构 题解及学习笔记_第3张图片

Question3:%两边的数据类型必须是整型int吗?

Answer:是的,否则会报错 invalid operands of types 'float' and 'int' to binary 'operator%'

P5706 【深基2.例8】再分肥宅水

输出数据应该完全按照样例,该换行时就要用换行符。

P2433 【深基1-2】小学数学 N 合一

(1)注意对小学奥数题也不要掉以轻心,有些题目需要仔细的计算,有些题目需要仔细看题。

(2)保留 6 位有效数字并不是小数点后六位

(3)用到开根号函数 pow(117,0.5) 时,记得加头文件#include

(4)用到printf函数时记得加头文件#include,否则即使在自己IDE可以编译过去,但是在OJ平台上也会报错

(5)熟悉char字符型的字符、数字之间的转换,如A为第1个字母,那么M的编号为几,编号为18的字母是哪个: cout << (int)('M'-'A')+1<<"\n"<< (char)('A'+18-1);

P5708 【深基2.习2】三角形面积

变量使用double来定义

四舍五入精确到一位小数时,可以 printf("%.1f",round(s*10)/10.0);  先乘10再四舍五入再除以10.0

P5709 【深基2.习6】Apples Prologue

做这道题时一定要注意题中的陷阱,想问题想全面:

(1)一定一定要注意表达式中的除数不能为零

(2)条件的判断,规定时间内吃完整数个苹果的情况、规定时间内有吃了整数多半个苹果的情况

(3)还有一种情况也要考虑到,那就是规定时间内早已经把苹果吃完啦!

P2181 对角线

这道题我并不会写!看了题解,终于找到了一种通俗易懂的题解:

首先要熟悉一下排列组合公式:

【洛谷OJ C++】洛谷题单100 入门1顺序结构 题解及学习笔记_第4张图片

(原文链接:https://www.zhihu.com/question/26094736)

已知:边长、顶点个数为n,本题中任何三条对角线都不会交于一点

推导:(1)每两个顶点连成一条对角线

(2)每两条对角线有一个顶点

(3)每一个交点是有两条对角线相交得到的,两条对角线对应着四个顶点

总结:此题转化为:从n个顶点中选出4个顶点,有多少种选法?

但是 obviously 这显然不是小学生数学知识能做出来的!!!_(:з」∠)_需要再学习写一篇排列组合说明文档

C_{n}^{2}=\frac{n!}{(n-2)!2!}

但是还有一点需要补充就是题中给的输入数值很大【洛谷OJ C++】洛谷题单100 入门1顺序结构 题解及学习笔记_第5张图片所以定义变量和存储变量时可以使用 unsigned long long 来解决

还有一种方法是通过高精算法来解决,但是这个!!!显然不是此阶段知识所涉及到的内容,需要再学习写一篇高精算法说明文档

这道题一开始做了只有82分,两个测试点没有通过,第四个测试点数据:输入数据:9765,输出数据:3964374251598225115

解决方案:测试unsigned long long的存储范围:

#include 
#include 
using namespace std;
int main(){
    long long ll_min = LLONG_MIN;
    long long ll_max = LLONG_MAX;
    unsigned long long ull_max = ULLONG_MAX;


    printf("min of long long: %lld\n", ll_min); // min of long long: -9223372036854775808
    printf("max of long long: %lld\n", ll_max); // max of long long: 9223372036854775807
    printf("max of unsigned long long: %llu\n", ull_max);   // max of unsigned long long: 18446744073709551615
}

测试结果为可以存储20位,运算过程中数值可达到10的20次方,所以提前做除法降值,

n和n-1一定有一个是2的倍数,因此2可以除尽,

同理n,n-1,n-2中一定有一个是3的倍数,因此3可以除尽(除掉2只会消除因数2而对3没有影响)

同理4也可以除尽,

可将结果转化为 n (n-1) (n-2) (n-3) / 24 转化为 n (n-1) / 2 (n-2) / 3  (n-3) / 4


P1001 A+B Problem

#include
using namespace std;
int main()
{
	int a,b;
	cin >> a >> b;
	cout << a + b;
	return 0;
}

 

P1000 超级玛丽游戏

#include
using namespace std;
int main()
{
	cout << "                ********" << endl
		<< "               ************" << endl
		<< "               ####....#." << endl
		<< "             #..###.....##...." << endl
		<< "             ###.......######              ###            ###" << endl
		<< "                ...........               #...#          #...#" << endl
		<< "               ##*#######                 #.#.#          #.#.#" << endl	
		<< "            ####*******######             #.#.#          #.#.#" << endl
		<< "           ...#***.****.*###....          #...#          #...#" << endl
		<< "           ....**********##.....           ###            ###" << endl
		<< "           ....****    *****...." << endl
		<< "             ####        ####" << endl
		<< "           ######        ######" << endl
		<< "##############################################################" << endl
		<< "#...#......#.##...#......#.##...#......#.##------------------#" << endl
		<< "###########################################------------------#" << endl
		<< "#..#....#....##..#....#....##..#....#....#####################" << endl
		<< "##########################################    #----------#" << endl	
		<< "#.....#......##.....#......##.....#......#    #----------#" << endl
		<< "##########################################    #----------#" << endl
		<< "#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#" << endl
		<< "##########################################    ############" << endl;											
	return 0;
}

 

P5703 【深基2.例5】苹果采购

#include
using namespace std;
int main()
{
	int a, b;
	cin >> a >> b;
	cout << a*b;
	
	return 0;
}

 

P5704 【深基2.例6】字母转换

#include
using namespace std;
int main()
{
	char a;
	cin >> a;
	cout << char(a-('a'-'A'));
	return 0;
}

 

P5705 【深基2.例7】数字反转

#include
using namespace std;
int main(){
	float m,n;
	int num;
	int a,b,c,d;
	
	cin >> m;
	
	num = m*10;
	a = num/1000;
	b = num/100%10;
	c = num/10%10;
	d = num%10;
	n = d + c*0.1 + b*0.01 + a*0.001;
	
	cout << n;
	
	return 0;
}

 

P5706 【深基2.例8】再分肥宅水

#include
#include
using namespace std;
int main(){
	float t;
	int n;
	
	cin >> t >> n;
	printf("%.3f\n%d",t/n,2*n);
	
	return 0;
}

 

P1425 小鱼的游泳时间

#include 

using namespace std;

int main(){
	int a, b, c, d, e, f;
	cin >> a >> b >> c >> d;
	
	e = c - a;
	f = d - b;
	if(f < 0){
		e = e - 1;
		f = 60 + d - b;	
	}	

	cout << e << " " << f;
	return 0;
}

 

P2433 【深基1-2】小学数学 N 合一

#include
#include
#include
#include
using namespace std;
const double pai = 3.141593;  //定义全局变量,浮点型、不可被修改 
int main() {
    int T;
    cin >> T;
    if (T == 1) {
        cout << "I love Luogu!";
    } else if (T == 2) {
        cout << 2 + 4 << " " << 10 - 2 - 4;
    } else if (T == 3) {
        cout << 14 / 4 << endl << 14 / 4 * 4 << endl << 14 % 4;
    } else if (T == 4) {
        printf("%3.3f",500.0/3);  // 保留六位有效数字 
    } else if (T == 5) {
        cout << 15;
    } else if (T == 6) {
        cout << pow(117,0.5);
    } else if (T == 7) {
        cout << 100 + 10 << "\n"
        << 100 + 10 - 20 << "\n"
        << 0 ;
    } else if (T == 8) {
    	int r = 5;
        cout << 2*r*pai << endl
        << pai*r*r << endl
        << pai*r*r*r*4/3;
    } else if (T == 9) {
    	int taozi = 1;
    	for(int day = 1;day<=3;day++){
    		taozi = (taozi+1)*2;
		}
        cout << taozi;
    } else if (T == 10) {
        cout << 9;
    } else if (T == 11) {
        cout << 100.0/(8-5);
    } else if (T == 12) { 
        cout << (int)('M'-'A')+1<<"\n"
        << (char)('A'+18-1);
    } else if (T == 13) {
        float ra,rb;
        int rc;
        ra = pai*4*4*4*4/3 ;
        rb = pai*10*10*10*4/3 ;
		rc = pow(ra+rb,1.0/3);
		cout << rc;
    } else if (T == 14) {
        cout << 50;
    }
    return 0;
}

P5708 【深基2.习2】三角形面积

#include 
#include 
#include 
using namespace std;
int main(){
	double a, b, c;
	double p, s;	
	
	cin >> a >> b >> c;
	
	p = 1.0*(a+b+c)/2;
	s = pow(p*(p-a)*(p-b)*(p-c),0.5);
	
	printf("%.1f",round(s*10)/10.0);	
	return 0;
}

P1421 小玉买文具

#include
using namespace std;
int main(){
	int a, b, c;
	cin >> a >> b;
	c = (b+a*10)/19;
	
	cout << c;
	
	return 0;
}

P5709 【深基2.习6】Apples Prologue

#include 
using namespace std;
int main(){
	unsigned int m, t, s;
	cin >> m >> t >> s;
	if(t == 0){  // 0不能做除数 
		cout << 0;
		return 0;
	}else if((s/t)>=m){  // s时间段内可以把苹果吃完 
		cout << 0;
	}
	else if(s%t == 0){  // s时间段内吃了整数个苹果 
		cout << m-s/t;
	}else{  // s时间段内吃了整数+不到一个苹果 
		cout << m-(s/t+1);
	}

	return 0;
}

P2181 对角线

#include 

using namespace std;

int main(){
	unsigned long long n,m;
	cin >> n;
	m =  n *(n-1) / 2 *(n-2) / 3 * (n-3) / 4;
	cout <

 

P5707 【深基2.例12】上学迟到

#include 
#include 
using namespace std;
int main(){
	int s, v, t, hour, min;
	
	cin >> s >> v;
	
	if(v <= 0){  // 速度既不可以是0,也不可以是负数 	
		return 0;
	}

	if(s%v == 0){  // 计算用时t,除得尽时直接用,除不尽时取整加一 
		t = 10 + s/v;
	}else{
		t = 10 + s/v + 1;
	}
	
	if(t > 8*60+24*60){  // 第一种情况,不能在规定时间内走完 
 		return 0; 
	}else if(t > 8*60){  // 第二种情况,不能在当天走完 
		t = 24*60 - (t - 8*60);  // 为时间转化做准备 
	}else{  // 最后一种情况,能在当天走完 
		t = 8*60-t;  // 为时间转化做准备 
	}
	
	hour = t / 60;
	min = t % 60;
	
	printf("%.2d:%.2d", hour, min); 
	
	return 0;
}

 

P3954 [NOIP 2017 普及组] 成绩

#include

using namespace std;
int main(){
	int A, B, C;
	
	cin >> A >> B >> C;
	cout << A*0.2 + B*0.3 + C*0.5;
	
	return 0;
}

 

你可能感兴趣的:(OJ,c++)