最近刷题学习到的知识点以及代码
- readme
- 学习的知识点
- P5707 上学迟到题 (时间运算问题) //TODO
- 函数类题目
- P1428 小鱼比可爱 (数组的注入与调用, for循环的运用)
- P2181 对角线 (数学题)
- P5709 限定时间吃苹果 (向上取整)
- P1421 算钱能买多少东西
- P5708 三角形面积计算 (数学知识海伦公式, 代码强制转换)
- P2433 综合题(数学根号,幂运算库math.h)
- P5706 分发快乐水(控制输出精度)
- P1425 鱼儿游泳(时间运算)
- P5705 反转输入内容 (字符串知识)
- P5704 大小写转换(ascii码调用)
- P1035 级数累加 (累加问题)
- P1008 数字组合题 (枚举算法并设置条件判断)
- P1046 摘苹果题 (设置数组并判断条件)
readme
我是一个小白,所以都是很基础的知识点,题目是洛谷上的,会持续更新,里面还有道题目还没想明白
欢迎留言喔😊
学习的知识点
输出多行字符串
一共三种方法
字符串需要使用“”进行输入
方法一:cout搭配换行符\n或者endl
#include<iostream>
using namespace std;
int main() {
cout << " ********\n";
cout << " ************\n" ;
cout << " ********"<<endl;
cout << " ........... #...# #...#"<< endl;
cout << " ##*####### #.#.# #.#.#"<< endl;
...
...
...
return 0;
}
方法二:printf搭配\n
#include<stdio.h>
int main() {
printf(
" ********\n"
" ************\n"
" ####....#.\n"
" %%%#@#**@*\n"
)
return 0;
}
演示案例:马里奥题号P1000
#include<iostream>
using namespace std;
int main() {
cout << " ********"<<endl;
cout << " ************" << endl;
**cout** << " ####....#."<< endl;
cout << " #..###.....##...." << endl;
cout << " ###.......###### ### ###"<< endl;
cout << " ........... #...# #...#"<< endl;
cout << " ##*####### #.#.# #.#.#"<< endl;
cout << " ####*******###### #.#.# #.#.#"<< endl;
cout << " ...#***.****.*###.... #...# #...#"<< endl;
cout << " ....**********##..... ### ###"<< endl;
cout << " ....**** *****...."<< endl;
cout << " #### ####"<< endl;
cout << " ###### ######"<< endl;
cout << "##############################################################"<< endl;
cout << "#...#......#.##...#......#.##...#......#.##------------------#"<< endl;
cout << "###########################################------------------#"<< endl;
cout << "#..#....#....##..#....#....##..#....#....#####################"<< endl;
cout << "########################################## #----------#"<< endl;
cout << "#.....#......##.....#......##.....#......# #----------#"<< endl;
cout << "########################################## #----------#"<< endl;
cout << "#.#..#....#..##.#..#....#..##.#..#....#..# #----------#"<< endl;
cout << "########################################## ############"<<endl;
return 0;
}
数组的运用及for循环批量填充数组
详情请见P1046题解
运用数学运算公式的方法 (幂,次方,开跟)
//首先是要用到math.h的库
#include<math.h>
using namespace std;
int main()
{
pow(数字,数字的幂);//这个常用于计算幂,以及开高次根号(注意是高次根号)
sqrt(数字);//开平方根
}
P5707 上学迟到题 (时间运算问题) //TODO
问题描述:
yyy 的学校要求早上 8 点前到达。学校到 yyy 的家一共有 $$s(s\le 10000)$$米,而 yyy 可以以 $$v(v<10000)$$米每分钟的速度匀速走到学校。此外在上学路上它还要额外花 10 分钟时间进行垃圾分类。请问为了避免迟到 yyy 最晚什么时候出门?输出 HH:MM 的时间格式,不足两位时补零。由于路途遥远, yyy 可能不得不提前一天出发,不过不可能提前超过一天。
题目bug:
不知道踩点到校算不算, 如果是非踩点到学校必须提前一分钟
怎么个不超过一天法? 是早上八点倒退24小时还是倒退到前一天的0点?
参考代码,仍需改进
#include<cstdio>
#include<iostream>
int main()
{
int S;//家到学校的距离
int V;//行走的速度
scanf("%d%d",&S,&V);
int t;
if(S%V==0)//因为后面是从07:59开始的,所以这里的时间少一分钟
{
t=S/V;
t+=9;//垃圾分类的时间
}
else
{
t=S/V;//时间如果不能被速度整除,就要提前一分钟出发
t+=10;//垃圾分类的时间
}
int H;//保存出发的小时,分钟
int M;
H=7;
M=59;
while(t!=0)
{
if(M!=0)
{
M--;
}
else
{
if(H!=0)
{
H--;
M=59;
}
else
{
H=23;
M=59;
}
}
t--;
}
int h1,h2;//分开保存小时,分钟的十位,个位
int m1,m2;
h1=H/10;
h2=H-(10*(H/10));
m1=M/10;
m2=M-(10*(M/10));
printf("%d%d:%d%d",h1,h2,m1,m2);
return 0;
}
函数类题目
P5735 距离函数 (利用坐标求三角形周长, 自定义函数)
题目描述: 给出平面坐标上不在一条直线上三个点坐标$$ (x_1,y_1),(x_2,y_2),(x_3,y_3)$$,坐标值是实数,且的绝对值不超过 100.00,求围成的三角形周长。保留两位小数。
对于平面上的两个点 $$(x_1,y_1),(x_2,y_2)$$,则这两个点之间的距离 $$dis=\sqrt{(x_2-x_1)2+(y_2-y_1)2}$$
要点: 因为是保留两位小数以及根号容易取不尽, 要使用double
代码如下
#include<iostream>
#include<math.h>
#include<bits/stdc++.h>
using namespace std;
double dis(double a1, double b1,double a2,double b2){//这一个部分就是函数如何定义的发方法
return sqrt(pow((a1 - a2),2) + pow((b1 - b2),2));//经过测试,如果不屑return是不会给原函数返回数值的
//所以返回值很重要
}
int main(){
double x1, y1;
double x2, y2;
double x3, y3;
cin >> x1 >> y1;
cin >> x2 >> y2;
cin >> x3 >> y3;
double r = dis(x1, y1, x2, y2) + dis(x1, y1, x3, y3) + dis(x2, y2, x3, y3);
cout << setprecision(2)<<fixed <<r << endl;
return 0;
}
P1428 小鱼比可爱 (数组的注入与调用, for循环的运用)
题目描述:输入一个数字表示鱼儿总数,输入对应总数的鱼儿颜值,随后进行比较,全部为向左比较,输出每个鱼儿高于左边的鱼数
输入格式
6
4 3 0 5 1 2
输出
0 0 0 3 1 2
知识点:
这题要依次为数组中的每一位注入数值就需要用到for循环进行注入, 在比较环节也可以运用for循环进行比较
代码如下
#include<iostream>
using namespace std;
int main(){
int fishnum;
int a[101]={0};//一定要初始化数组,不然指针里会有数据残留,{0}就是初始化
int b[101]={0};
cin >> fishnum;
for (int i = 1; i <= fishnum; i++)//运用for循环把a[1]到a[n]都注入想要输入的文字
{
cin >> a[i];//这里就可以直接输入数字了
}
for (int i = 1; i <= fishnum;i++)//这里照旧进行一次循环,起作用等于枚举(每一个都尝试)每一个a[i]值
{
for (int j = i; j >= 1;j--)//而这里则是在以i为起点向前(左)枚举每一个比a[i]小的数字
{
if(a[i] > a[j]){ //运用if判断左边与右边i的大小,成立则让对应的空数组
b[i]++; //位置b[i]自增,最终获得所有比自己小的数字
}
}
}
for (int i = 1; i <= fishnum;i++) //用for循环打印
{
cout << b[i] << " ";
}
return 0;
}
P2181 对角线 (数学题)
题目描述:
对于一个 nn 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
例如,6边形:

解法一: 公式法
这个由计算公式
对于任意外凸多变形
n为边数
代码
#include<bits/stdc++.h>
using namespace std;
unsigned long long n,ans;
int main()
{
scanf("%lld",&n);
ans=n * (n-1) / 2 * (n-2) / 3 * (n-3) / 4;
printf("%lld\n",ans);
return 0;
}
解法二: 数列法
有位大佬的题解, 非常神奇,做差值,发现是数列形式
| 边数 | 交点数 | 做差01 | 02 | 03 |
|---|---|---|---|---|
| 1 | 0 | |||
| 2 | 0 | |||
| 3 | 0 | 0 | ||
| 4 | 1 | 1 | 1 | |
| 5 | 5 | 4 | 3 | 2 |
| 6 | 15 | 10 | 6 | 3 |
| 7 | 35 | 20 | 10 | 4 |
| 8 | 70 | 35 | 15 | 5 |
逐层表达出即可
//#include<cstdio>
#include<iostream>
//#include<cmath>
using namespace std;
long long a1[100000];//定义数组,长度100000
long long a2[100000];//longlong为64位长整型,最大可到2^64次方
long long a3[100000];//数组默认每个数字都是0
int main(){
long long n;
cin >> n;
int t = 0;
for(int i = 1; i <= n; i++)
{
a1[i] = a1[i - 1] + i; //生成1,3,6,10序列
} //这里只有i-1才能让下一个运算中用上上一位的数字,不然会出现
// a[3]=a[3]+i; 而a[3]还没定义默认是0
for(int i=1; i<=n; i++)
{
a2[i] = a2[i - 1] + a1[i]; //生成1,4,10,20序列
//本质就是让表格的 “02列” + 01列上减去下的插值,刚好等于01列
}
for (int i = 1; i <= n;i++)
{
a3[i] = a3[i - 1] + a2[i]; //生成1,5,15,35序列
//同理得到交点数
}
cout << a3[n-3];
return 0;
}
P5709 限定时间吃苹果 (向上取整)
题目: 八尾勇喜欢吃苹果。她现在有 。
吃完一个苹果需要花费
吃完一个后立刻开始吃下一个。现在时间过去了
请问她还有几个完整的苹果?
这个题目陷阱很多,首先是题目给的数字范围, 必须要考虑吃的速度为0个/分钟时的情况(约等于光速吃苹果),所以答案要写0
有时候太高估自己的代码了,其实漏洞百出
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int m , a , t, s;
cin >> m >> t >> s;
if ( t == 0 )
{
cout << 0 << endl;
return 0; //等于中途暂停
}
a = m-ceil((double)s/t);//向上取整,ex:9.5取10
if(a<=0)
{
cout << 0;
}
else cout << a;
return 0;
}
P1421 算钱能买多少东西
问题描述
班主任给小玉一个任务,到文具店里买尽量多的签字笔。已知一只签字笔的价格是 11 元 99 角,而班主任给小玉的钱是 a元 b 角,小玉想知道,她最多能买多少只签字笔呢?
问题很简单, 就不过多解释了
#include<iostream>
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b;
a *= 10;//将元转化为角
c = a + b;
int f = 19;
cout << c / f;
return 0;
}
P5708 三角形面积计算 (数学知识海伦公式, 代码强制转换)
题目描述
一个三角形的三边长分别是 a、b、c,那么它的面积为
,其中
。输入这三个数字,计算三角形的面积,四舍五入精确到 1 位小数。
保证能构成三角形,
每个边长输入时不超过2位小数。
#include<iostream>
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
int main() {
double a, b, c;
double p;
double s;
cin >> a >> b >> c;
p = 1.0*(a + b + c) / 2;
cout << setprecision(1) << fixed << pow(1.0 * p * (p - a) * (p - b) * (p - c), 1.0 / 2) << endl;
return 0;
}
显式强制转换,例如:
int a=65;规范化
char b=char(a);
执行该语句段后,a的值为65,而b的值是“a”。
隐式强制转换,例如:
int a;
double b=3.88;
a=b;
执行该语句段后,b的值为3.88,而a的值是 3。
这是为什么呢?
因为,在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分直接舍去。 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。转换类型按以下几个顺序进行:
- 转换按数据长度增加的方向进行,以保证精度不降低。如intint型和longlon**g型运算时,先把intint量转成longlon**g型后再进行运算。
- 若两种类型的字节数不同,转换成字节数高的类型
- 若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型
- 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算
- char型和 short型参与运算时,必须先转换成int
P2433 综合题(数学根号,幂运算库math.h)
问题 1
请输出 I love Luogu!
问题 2
这里有 10 个苹果,小A 拿走了 2 个,Uim 拿走了 4 个,八尾勇拿走剩下的所有的苹果。我们想知道:
- 小A 和 Uim 两个人一共拿走多少苹果?
- 八尾勇能拿走多少苹果?
现在需要编写一个程序,输出两个数字作为答案,中间使用空格分开。
问题 3
现在有 14 个苹果。要均分给 4 名同学,分不掉的苹果放回冰箱。请问:
-
每位同学能分得几个苹果?
-
一共分出去多少苹果?
-
把几个苹果放回冰箱?
现在需要编写一个程序,输出三个数字作为答案,每个数字一行。
问题 4
现在有 500 毫升的肥宅快乐水,要均分给 3 名同学,每位同学可以分到多少毫升?请输出一个数字作为输出。保留 6 位有效数字,且不使用科学计数法。
问题 5
甲列火车长 260 米,每秒行 12 米;乙列火车长 220 米,每秒行 20 米,两车相向而行,从两车车头相遇时开始计时,多长时间后两车车尾相离?已知答案是整数。
问题 6
一个长方形长宽分别是 6cm、9cm,求它的对角线长度(cm)。直接使用 cout 输出。
问题 7
Uim 银行账户里面有100元。经过了下面的操作:
-
往里面存了 10 元;
-
购物花掉了 20 元;
-
把里面的钱全部取出。
请在每次操作后输出账户余额,并使用换行符隔开。
问题 8
当半径为 r=5,请输出圆的周长、面积和球体积。取 π=3.141593。请直接使用 cout 输出答案,每行一个数字。
问题 9
一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;第二天他也刚好吃了剩余桃子的一半,贪嘴多吃了一个;第三天他又刚好吃了剩下的桃子的一半,并贪嘴多吃了一个。第四天起来一看,发现桃子只剩下一个了。请问小猴买了几个桃子?
问题 10 这是一道小学奥数题
洛谷的评测任务可以看作是均匀增加的。8 台评测机 30 分钟可以刚好把评测队列中的程序评测完毕(测试时间中任务也在增加),10 台评测机 6 分钟可以刚好把评测队列中的程序评测完毕,请问几台评测机可以在 10 分钟时刚好把评测队列中的程序评测完毕?

问题 11
小A跑步速度 5m/s,八尾勇跑步速度 8m/s,八尾勇在小A后面 100m,他们同时起跑,请问需要多长时间八尾勇可以追上小A?输出一个数字表示答案,使用 cout 直接输出。
问题 12
大家都知道有 26 个英文字母,其中A是第一个字母。现在请编程求出:
- M 是字母表中的第几个字母?
- 第 18 个字母是什么?
输出一个数字和一个字母,使用换行隔开。
int main()
{
cout << 'M'-'A'+1 << endl;//单引号就可以直接调用字符的ascii码
char c12 = ('A' + 17);//定义char就是用单引号,可以直接加上数
cout << c12 << endl;
}
问题 13 求解高次开跟,直接用 pow() 函数即可配合分数幂
小 A 有两块球形橡皮泥,一个半径是 4,一个半径是 10。他想把这两块橡皮泥揉在一起,然后塑造成一个正方体,请问这个正方体的棱长是多少?如果结果不是整数,则舍去小数点之后的数字。取 Π = 3.141593π=3.141593。
这里答案写错了,不过无伤大雅,记得时4/3Π R^3即可
int main()
{
double pai13 = 3.141593;
double a13 = pai13 * pow(4, 2);
double b13 = pai13 * pow(10, 2);
double c13 = a13 + b13;
cout << pow(c13,1.0/3) << endl;//这里记得一定要写成1.0不然就会舍掉小数部分
}
正确写法
int main()
{
double pai13 = 3.141593;
double a13 = 4.0/3*pai13 * pow(4, 3);
double b13 = 4.0/3*pai13 * pow(10, 3);
double c13 = a13 + b13;
cout << pow(c13,1.0/3) << endl;//这里记得一定要写成1.0不然就会舍掉小数部分
}
问题 14
根据咕咕网校的预测,当课程定价为 110 元时,会有 10 人报名。如果课程价格每降低 1 元,就会多 1 名报名者(反之亦然)。如果希望总共能收到 3500 元学费的话,那么应该定价多少呢?已知本题有两个答案符合要求,则取较小的那一个。如果这个答案不是整数,则需四舍五入精确到整数。
这是一个解方程的题目,设减价x元
自己设计了一个算法用于枚举方程, 答案解决问题下面
已经解决的问题
得到方程(110 - x)(10 + x) = 3500,这里想用for循环枚举求解方程答案,但是失败了
解决方法:
- 首先得移项, x在左常数在右边, 语言本身没那么智能
- 得用==符号, 因为=符号常用于表示赋值
int main()
{
int x;
for (int x = 1; x >= 100; x++)
{
if ((110 - x)(10 + x) = 3500)//表达式必须是可修改的左值?没看懂
break;
}
cout << x << endl;
}
正确写法
#include<iostream>
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
int main()
{
int a14, b14;
//设减价幅度为x
for (int x = 1; x <= 100; x++)//运用for循环,把减价幅度x从1到100都试一遍
{
if (pow(x, 2) - 100 * x == -2400//化简成这个形式即可
{
//cout << x << endl;
a14 = x;//注意:这里的外部定义内部赋值不能写成int a14 = x; 会被识别成新的int
break;
}
}
for (int y = 100; y >= 1; y--)
{
if (pow(y, 2) - 100 * y == -2400)
{
//cout << y << endl;
b14 = y;//注意:这里的外部定义内部赋值不能写成int b14 = x; 会被识别成新的int
break;
}
}
if (110 - a14 > 110 - b14)//进行一次对比,如果减价方案一比减价方案二大,则选择减价方案二
{
cout << 110 - b14 << endl;
}
else//与前面的if反之
{
cout << 110 - a14 << endl;
}
return 0;
}
源代码
#include<iostream>
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
int main()
{
int T;
cin >> T;
if (T == 1)
{
cout << "I love Luogu!";
}
else if(T ==2)
{
int a = 10;
int s1 = 2;
int s2 = 4;
int s3 = a - s1 - s2;
cout << s1 + s2 << " " << s3;
}
else if (T == 3)
{
int a3 = 14;
int s3 = 4;
cout << a3 / s3 << endl << 4 * (a3 / s3) << endl << a3 % s3 << endl;
}
else if (T == 4)
{
double a4 = 500;
int b4 = 5;
cout << setprecision(6) << a4 / b4 << endl;
}
else if (T == 5)
{
int a5 = 260;
int b5 = 220;
int s5 = 12;
int d5 = 20;
cout << (a5 + b5) / (s5 + d5) << endl;
}
else if (T == 6)
{
int a6 = pow(6,2);
int b6 = pow(9,2);
cout << sqrt(a6+b6) << endl;
}
else if (T == 7)
{
int a7 = 100;
a7 += 10;
cout << a7 <<endl;
a7 -= 20;
cout << a7 << endl;
a7 -= 90;
cout << a7 << endl;
}
else if (T == 8)
{
double r = 5;
double pai = 3.141593;
cout << 2 * r * pai << endl;
cout << pow(r, 2)*pai << endl;
cout << 4.0 / 3.0 * pai * pow(r, 3) << endl;
}
else if (T == 9)
{
cout << (((((1+1)*2)+1)*2)+1)*2 << endl;
}
else if (T == 10)
{
cout << "9" << endl;
}
else if (T == 11)
{
cout << 100.0 / 3.0 << endl;
}
else if (T == 12)
{
cout << 'M'-'A'+1 << endl;
char c12 = ('A' + 17);
cout << c12 << endl;
}
else if (T == 13)
{
/*double pai13 = 3.141593;
double a13 = pai13 * pow(4, 2);
double b13 = pai13 * pow(10, 2);
double c13 = a13 + b13;
cout << setprecision(0)<<fixed << pow(c13,1.0/3) << endl;*/
double pai13 = 3.141593;
cout << (int)(pow(4.0 / 3 * pai13 * (4 * 4 * 4 + 10 * 10 * 10), 1.0 * 1 / 3));
}
else if (T == 14)
{
int a14, b14;
for (int x = 1; x <= 100; x++)
{
if (pow(x, 2) - 100 * x == -2400)
{
//cout << x << endl;
a14 = x;
break;
}
}
for (int y = 100; y >= 1; y--)
{
if (pow(y, 2) - 100 * y == -2400)
{
//cout << y << endl;
b14 = y;
break;
}
}
if (110 - a14 > 110 - b14)
{
cout << 110 - b14 << endl;
}
else
{
cout << 110 - a14 << endl;
}
}
return 0;
}
P5706 分发快乐水(控制输出精度)
题目: 每个人分发快乐水, 一人两杯, 输入快乐水总量, 以及人数, 给出每个人能分到的快乐水总量以及需要的杯子数
setprecision(精度值) 设置输出精度(以数字左边为基准)
fixed 固定精度点为小数点处(可以用此配合上面的函数输出指定小数点后的位数)
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
double t;
int n;
cin >> t >> n;
cout << setprecision(3) << fixed <<t / n << endl << 2 * n;
return 0;
}
P1425 鱼儿游泳(时间运算)
题目: 这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按24小时制计算),它发现自己从
a时b分一直游泳到当天的c时d分,请你帮小鱼计算一下,它这天一共游了多少时间呢?
知识点: 涉及到时间运算的知识点, 原本构想是转换运算进制, 但这里其实只需要小时减去小时, 分钟减去分钟, 同时运用 if 进行借位相减即可
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
int a, b, c, d;
cin >> a >> b >> c >> d;
int q = c - a; int w = d - b;
if (w < 0) {
q--, w += 60;//小时数自减1,同时让小于0的分钟数加上60,
//等于 60-一个复数,得到借位后的结果
}
cout << q << " " << w;
return 0;
}
P5705 反转输入内容 (字符串知识)
发现两种写法,一种是正经写法,采用
STL库内函数
reverse( 数组名 .begin().begin() ,, 数组名 .end().end() )😉;
可实现直接反转
#include<iostream>
using namespace std;
int main()
{
string a;
cin >> a;
reverse(a.begin(), a.end());
cout << a;
return 0;
}
方法1.5:
函数:str.size() 获取字符串长度
#include<iostream>
using namespace std;
string a;//先定义一个字符串
int main() {
cin>>a;
//下面的a.size()就可以获得这个字符串的长度
for(int i=a.size()-1;i>=0;i--)//
cout<<a[i];
return 0;
}
未理解点
int main() {
//这里size-1或者不减一结果都是一样的,但理论来说size-1
//会导致第一个变成了“.xxx”挺奇怪的,可是实际结果却是一样的
for(int i=a.size()-1;i>=0;i--)//
for(int i=a.size();i>=0;i--)
return 0;
}
我的骚操作:直接输入一个double复数,乘于10变为整数赋值int
利用取余运算获取常量的个,十,百,千,位,在输出时调转。
注意s*10并不会改变s必须要有=某个数,第四行
int main() {
double s;
cin >> s;
s *= 10;//s*10 = int c 才能赋值,如果要原地乘必须用*=
int a = s;
int b[5];
b[1] = a % 1000 % 100 % 10;
b[2] = a % 1000 % 100 / 10;
b[3] = a % 1000 / 100;
b[4] = a / 1000;
cout << b[1] << b[2] << b[3] << "." << b[4];
return 0;
}
P5704 大小写转换(ascii码调用)
这道题主要掌握的知识点是:类型转换并不会改变元数据,只会改变结果
代码注释部分有解释
a和A的ascii码分别是97,65
#include<iostream>
using namespace std;
int main() {
//97 65
char z;
cin >> z;
char a= (int)(z-32);
cout << a;
//转换类型只会体现在结果上,对原来的数据没有影响
/*(int)(z - 32);
cout << z;*/ //输出结果还是原来的式子
return 0;
}
P1035 级数累加 (累加问题)
题目:
一个式子累加,1+ 1/2 + 1/3 + ... + 1/n 当n无穷大时理论上可以算出一切数,则输入一个数字,并找出刚好满足其的n的值,即刚好到达指定大小
思路:
设置一个while循环,配合自增运算符不断自增,同时兼顾复数所需要的运算形式,采用double运算(精度更高)
#include<iostream>
using namespace std;
//一个式子累加,1+ 1/2 + 1/3 + ... + 1/n 当n无穷大时理论上可以算出一切数,则输入一个数字,并找出刚好满足其的n的值
//即刚好到达指定大小
int main()
{
int n = 1, k;
double s = 0;//因为是复数,所以要运用到double
cin >> k;
while (s <= k) {
s += 1.0 / n;
n++;
}
cout << n - 1 << endl;
return 0;
}
P1008 数字组合题 (枚举算法并设置条件判断)
题目:1,2,3,4,5,6,7,8,9排列组合成三个数,使得三个数呈1:2:3的比例且每个数中的元素不重复
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
//题目:1,2,3,4,5,6,7,8,9排列组合成三个数,使得三个数呈1:2:3的比例且每个数中的元素不重复
for (int i = 123; i < 333; i++)//从最小的排列组合123开始自增循环,最大不超过333(超过333最后一个数字就超过1000了)
{
int a[4], b[4], c[4];//定义三个数组括号里写的是数组位数,习惯性会写10,因为会自动添加一个字符所以最少写4(三位数)
a[1] = i % 100 % 10;//获取i的个位数,123%100=23 23%10=3 取余获得余数刚好是个位数
a[2] = i % 100 / 10;//获取i的十位数 123%100=23 23/10=2 c++除法自动取整不会保留小数
a[3] = i / 100;//获取i的百位数 123/100=1 获得百位
b[1] = 2 * i % 100 % 10;//乘上2,按题目要求得到 比例为“2”的一组数
b[2] = 2 * i % 100 / 10;
b[3] = 2 * i / 100;
c[1] = 3 * i % 100 % 10;//乘上3,同理
c[2] = 3 * i % 100 / 10;
c[3] = 3 * i / 100;
if (a[1] * a[2] * a[3] * b[1] * b[2] * b[3] * c[1] * c[2] * c[3]==362880 && a[1] + a[2] + a[3] + b[1] + b[2] + b[3] + c[1] + c[2] + c[3]==45)
//上面这一行是把所有1~9的数字乘起来加起来,如果不重复数字结果一定是固定的,乘起来362880 加起来45
{
cout << i << " " << i * 2 << " " << i * 3 << endl;//打印即可
}
}
return 0;
}
P1046 摘苹果题 (设置数组并判断条件)
这道题运用了数组得知识点,填充数组并进行对比
#include<iostream>
using namespace std;
//题目:第一行输入每个苹果的高度,第二行输入摘苹果人的身高,附加条件是一把30cm高的椅子,求最后能摘下来的苹果的数量
int main()
{
int arr[20];//定义一个数组
int 椅子高 = 30;
int TH; //定义触碰的高度,但因为要后面输入指定数字所以没写,用cin输入
int ans = 0; //摘下的苹果数,在没有进行判断前,默认0
//10个数组放10个苹果的高度
for (int i = 0; i < 10; i++)
{
cin >> arr[i];//运用for循环填充每一个数组的内容
}
cin >> TH;//输入能够碰到的高度
for (int i = 0; i < 10; i++) //运用for循环让每一个数组轮流出场,进行判断
{
if (arr[i] <= (椅子高 + TH))//判断数组(苹果高度)与椅子高度加触碰高度的大小,满足则ans自增1
ans++;
}
//获取数据后输出ans的数字,即能够摸到苹果的数量
cout << ans << endl;
return 0;
}

浙公网安备 33010602011771号