C++刷题 【入门1】顺序结构+【入门2】分支结构
【入门1】顺序结构
先来一道简单题练练手
### 链接:https://ac.nowcoder.com/acm/contest/18839/1005
题目描述
输出九九乘法表,输出格式见样例。
输入描述:
此题没有输入
输出描述:
输出乘法表,对齐方式见样例输出
示例1
输入
复制
无
输出
复制
1*1= 1
1*2= 2 2*2= 4
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
#include<stdio.h>
int main()
{
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
printf("%dx%d=%d ",j,i,i*j);//可以看到这里的细节小空格吗! 避免都连在一起了
输出的时候是%2d !!!!
}
printf("\n");//换行操作
}
return 0;
}
【深基2.例7】数字反转
## 题目描述
输入一个不小于 100 且小于 1000,同时包括小数点后一位的一个浮点数,例如 $123.4$ ,要求把这个数字翻转过来,变成 $4.321$ 并输出。
## 输入格式
一行一个浮点数
## 输出格式
一行一个浮点数
## 样例 #1
### 样例输入 #1
### 样例输出 #1
1
2
3
4.321
我们用scanf控制输入,把整数部分和小数部分分开来做反转(因为小数部分只有一位,只做整数部分就行)
#include<bits/stdc++.h>
using namespace std;
int z,x,dz;
int main(){
scanf("%d.%d",&z,&x); //输入整数部分+小数点+小数部分
while(z){ //愉快的反转环节
dz=dz*10+z%10;
z/=10;
}
printf("%d.%d\n",x,dz); //就可以输出了
return 0;
}
注意浮点数需要定义为float,在倒置数字时不要忘记了小数点
STL大法好!
首先拿到题目,第一感觉就是字符串,当然一个个读入在反过来输出也可以。
但字符串的反转操作我们可以用STL也可以直接倒序输出。
介绍一下STL里面的反转字符串函数
reverse()
reverse()
其格式是:
(
reverse( 数组名
.
(
)
.begin()
,
, 数组名
.
�
�
�
(
)
.end()
)
;
);
在此大呼一声:STL大法好!
你们最喜欢的代码:
#include<bits/stdc++.h> //文件头
using namespace std;
string a; //定义字符串
int main()
{
cin>>a; //输入
reverse(a.begin(),a.end()); //反转
cout<<a; //输出
return 0; //养成好习惯
}
利用字符串进行处理
我们先来认识一下c++的字符串string,这个类型相当于c中char[],和char一样,string也可以用数组表示多个字符串,即string a[]。接下来看看常见的几个string类型操作:
string a;//定义一个string类字符串。
int len=a.size()//读取串a的长度,注意此时a中字符下标是从0开始的。
有了这些,我们便可以反转了!
#include<bits/stdc++.h>万能头文件
using namespace std;
string a;
signed main()
{
cin>>a;
int len=a.size();读取长度
for(int i=len-1;i>=0;i--)反转
cout<<a[i];
return 0;
}
刷题积累
常用的输入控制符有:
%d:读入一个 32 位有符号整数。
%u:读入一个 32 位无符号整数。
%lld:读入一个 64 位有符号整数。
%llu:读入一个 64 位无符号整数。
%f:读入一个 float 类型。
%lf:读入一个 double 类型。
跟上一道题看着很像,但是细节不太一样,一个是去处理浮点,(其中有用STL大法的和将小数点前后和小数点分开进行输入的还有利用字符串的读写来处理的)下面这个是去处理整数
[NOIP2011 普及组] 数字反转
## 题目描述
给定一个整数 $N$,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
## 输入格式
一个整数 $N$。
## 输出格式
一个整数,表示反转后的新数。
## 样例 #1
### 样例输入 #1
### 样例输出 #1
1
2
3
321
## 样例 #2
### 样例输入 #2
1
2
3
4
5
-380
### 样例输出 #2
1
2
3
-83
## 提示
**【数据范围】**
$-1,000,000,000\leq N\leq 1,000,000,000 $。
noip2011 普及组第一题
#include<bits/stdc++.h>
using namespace std;
int n,m=0;//当时看题解时忽略了这一个0,导致想了半天
int main(){
cin>>n;
while(n){ //判断是否反转结束
m=m*10+n%10; //取原数的最后一位补到结果后面
n/=10; //最后一位可以丢掉了
}
cout<<m<<endl;
return 0;
}
样例分析:
第一个123输入后输出变为321
先进入while中 while不等于0那么并不会跳出循环,下来进入while循环中去,其中n=123对10取余后可得3,那么m=10m+3,m等于3。下来进入while中后n变为12,然后进入循环之中去,m=30+2=32 下来进入while中后n变为1,然后进入循环之中去,m=320+1+321 之后n=0,跳出循环输出m
第二个-380输入后输出变为-83
先进入while中 while不等于0那么并不会跳出循环,下来进入while循环中去,其中n=-380对10取余后可得0,那么m=10m+0,m等于0。下来进入while中后n变为-38,然后进入循环之中去,m=0+8=8 下来进入while中后n变为-3,然后进入循环之中去,m=-80+3=-83 之后n=0,跳出循环输出m
【深基2.习2】三角形面积
## 题目描述
一个三角形的三边长分别是 $a$、$b$、$c$,那么它的面积为 $\sqrt{p(p-a)(p-b)(p-c)}$,其中 $p=\frac{1}{2}(a+b+c)$。输入这三个数字,计算三角形的面积,四舍五入精确到 $1$ 位小数。
## 输入格式
第一行输入三个实数 $a,b,c$,以空格隔开。
## 输出格式
输出一个实数,表示三角形面积。精确到小数点后 $1$ 位。
## 样例 #1
### 样例输入 #1
```
3 4 5
```
### 样例输出 #1
```
6.0
```
## 提示
数据保证能构成三角形,$0\leq a,b,c\leq 1000$,每个边长输入时不超过 $2$ 位小数。
一道基础计算题,注意所有变量类型都为double。
唯一涉及到的知识点就是
sqrt:这是一个求根函数,在函数内填上数字或变量,这个函数就会自动返回求根后的值。
最后用printf输出,注意用.1lf返回,因为是保留一位小数。
Code:
#include<bits/stdc++.h>
using namespace std;
double a,b,c,p,ans;
int main()
{
cin>>a>>b>>c;
p=(a+b+c)/2;
ans=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%.1lf",ans);
return 0;
}
小鱼的游泳时间
## 题目描述
伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。
这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按 $24$ 小时制计算),它发现自己从 $a$ 时 $b$ 分一直游泳到当天的 $c$ 时 $d$ 分,请你帮小鱼计算一下,它这天一共游了多少时间呢?
小鱼游的好辛苦呀,你可不要算错了哦。
## 输入格式
一行内输入四个整数,以空格隔开,分别表示题目中的 $a, b, c, d$。
## 输出格式
一行内输出两个整数 $e$ 和 $f$,用空格间隔,依次表示小鱼这天一共游了多少小时多少分钟。其中表示分钟的整数 $f$ 应该小于 $60$。
## 样例 #1
### 样例输入 #1
```
12 50 19 10
```
### 样例输出 #1
```
6 20
```
## 提示
对于全部测试数据,$0\le a,c \le 24$,$0\le b,d \le 60$,且结束时间一定晚于开始时间。
首先肯定硬算小时数和分钟数,即c-a和d-b。
但是d<b怎么办?WA掉?
no no no,我当然会处理。
如果d<b(y减出来是个负数),那么x一定大于0(肯定的啦~),所以可以向小时借60分钟,把y变成正数。
#include <iostream>
using namespace std;
int main()
{
int a,b,c,d;
cin>>a>>b>>c>>d;
int x=c-a,y=d-b;
if(y<0){x--;y+=60;}
cout<<x<<" "<<y;
return 0;
}
小玉买文具
## 题目描述
班主任给小玉一个任务,到文具店里买尽量多的签字笔。已知一只签字笔的价格是 $1$ 元 $9$ 角,而班主任给小玉的钱是 $a$ 元 $b$ 角,小玉想知道,她最多能买多少只签字笔呢。
## 输入格式
输入只有一行两个整数,分别表示 $a$ 和 $b$。
## 输出格式
输出一行一个整数,表示小玉最多能买多少只签字笔。
## 样例 #1
### 样例输入 #1
```
10 3
```
### 样例输出 #1
```
5
```
## 提示
#### 数据规模与约定
对于全部的测试点,保证 $0 \leq a \leq 10^4$,$0 \leq b \leq 9$。
直接转换成角进行运算就都是整数了
#include<bits/stdc++.h>//万能头文件
using namespace std;
int a,b,c,d,e,f,g;//教大家一个小技巧,将变量定义在这里可以让变量初始值为0。
int main(){
cin>>a>>b;
c=a*10+b;
cout<<c/19;
return 0;
}
一些水题:
1002 排列式
7254是一个不寻常的数,因为它可以表示为7254 = 39 x 186,这个式子中1~9每个数字正好出现一次
输出所有这样的不同的式子(乘数交换被认为是相同的式子)
结果小的先输出;结果相同的,较小的乘数较小的先输出。
#include <iostream>
#include <algorithm>
//next_permutation(),返回大于等于当前序列的全排列
using namespace std;
/*
样例输出中乘积都是四位数,四位数=一位数*四位数或者两位数*三位数
全排列,把所有顺序都走一遍,符合条件的打印
*/
//判断情况是否成立,即因子相乘是否==预设乘积res,符合即输出
void res_lr(int preres,int l,int r){//输出函数
if(preres == l * r){
cout << preres << " = " << l << " x " << r << endl;
}
}
void f1(int a[]){
//乘积数
int res;
//l1 - 一位数因子 / r1- 四位数因子
int l1,r1;
//l2 - 两位数因子 / r2 - 三位数因子
int l2,r2;
//循环不断做枚举操作,使用do -while不漏掉第一个顺序
do{
//4位数=1位数*4位数的情况
res = a[0] * 1000 + a[1] * 100 + a[2]* 10 + a[3];
l1 = a[4];
r1 = a[5] * 1000 + a[6]*100+a[7]*10+a[8];
res_lr(res,l1,r1);
//4位数= 2位数*3位数的情况
res= a[0] * 1000 + a[1] * 100 + a[2]* 10 + a[3];
l2 = a[4]*10 + a[5];
r2 = a[6] * 100 + a[7] * 10 + a[8];
res_lr(res,l2,r2);
}while(next_permutation(a,a+9));
}
int main(){
//定义从1到9的数组,使用next_permutation(a,a+9)做全排列
int t[9] = {1,2,3,4,5,6,7,8,9};
f1(t);
return 0;
}
1003 小飞机
KiKi学会了printf在屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。
#include <iostream>
using namespace std;
int main(){
printf(" ** \n");
printf(" ** \n");
printf("************\n");
printf("************\n");
printf(" * * \n");
printf(" * * \n");
return 0;
}
1004 学姐的“Helloworld!”
zafu又迎来了新一届的小可爱们,19级的大家突然变成了学长学姐。
在这些学长学姐中,有那么一位备受欢迎的学姐,她各个方面都非常优秀,但是就是对编程提不起兴趣。
上学期的时候学姐决定从头开始复习C语言,刷起了PTA上的习题集,可是第一题的输出"Hello world!"她就做错了,输出成了"Helo word!"。
为了安慰这位可爱的学姐,学弟学妹们请同样输出"Helo word!"来告诉学姐不止她一个人会犯这个错。
#include <iostream>
using namespace std;
int main(){
printf("Helo word!\n");
return 0;
}
1005 乘法表
输出九九乘法表,输出格式见样例。
#include <iostream>
using namespace std;
int main(){
int i,j;
for(i=1;i<=9;i++){//外层循环,控制行数
for(j=1;j<i;j++){//内层循环,控制从1开始
printf("%d*%d=%2d ",j,i,j*i);
}
printf("%d*%d=%2d\n",j,i,j*i);
}
return 0;
}
1006 KiKi学程序设计基础
BoBo老师教了KiKi学习程序设计基础,他知道C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期KiKi学习了C和C++,学好他们,其他编程语言都可以很轻松掌握。C和C++的输入有区别,请帮KiKi输出C和C++输出Hello world的代码。
#include <iostream>
using namespace std;
int main(){
printf("printf(\"Hello world!\\n\");\n") ;
printf("cout << \"Hello world!\" << endl;");
return 0;
}
1007 疫情死亡率
请根据各国报告的疫情确诊数和死亡数,计算新冠疫情在各国的死亡率。
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main(){
double a,b;
cin >> a >> b;
double c=100 * b/a;
printf("%.3lf%%",c);
return 0;
}
1008 爱因斯坦的名言
初出茅庐的小伙伴们,你们对编程了解多少?希望你们记住爱因斯坦的这句名言,好好学习,天天向上。
#include <iostream>
using namespace std;
int main(){
printf("\"Genius is 1%% inspiration and 99%% perspiration.\"");
return 0;
}
1009 字符串输出1.0
Mo2学长给大家发福利了,请大家将“Welcome to ACM / ICPC!”重复输出三次;
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
printf("Welcome to ACM / ICPC!\n");
printf("Welcome to ACM / ICPC!\n");
printf("Welcome to ACM / ICPC!");
return 0;
}
1010 牛牛学说话之-整数
牛牛刚刚出生,嗷嗷待哺,一开始他只能学说简单的数字,你跟他说一个整数,他立刻就能学会。
输入一个整数,输出这个整数。
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a;
scanf("%d",&a);
printf("%d",a);
return 0;
}
1011 牛牛学说话之-浮点数
会说整数之后,牛牛开始尝试浮点数(小数)
输入一个浮点数,输出这个浮点数。
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
float a;
scanf("%f",&a);
printf("%.3f",a);
// printf("Welcome to ACM / ICPC!");
return 0;
}
1012 牛牛学加法
给你两个整数,要求输出这两个整数的和
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);
return 0;
}
1013 牛牛学除法
输入两个整数a, b, 输出a/b的值,只保留整数部分
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a/b);
return 0;
}
1014 牛牛学取余
输入两个整数a, b, 输出a 除以b的余数,5除以2的余数为1,10除以4的余数为2
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a%b);
return 0;
}
1015 浮点除法
输入两个整数a, b, 输出a除以b的值,保留三位小数
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%.3f",a/(b*1.0));
return 0;
}
1016 计算带余除法
给定两个整数a和b (0 < a,b < 10,000),计算a除以b的整数商和余数。
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d %d",a/b,a%b);
return 0;
}
1017 水题再次来袭:明天星期几
今天星期一,明天必然星期二。这是肯定不变的规律。如果我告诉大家,今天礼拜几,你能帮我推算出明天星期几吗? 已知,我们对于星期几的日期(周一到周日)简写如下: 1,2,3,4,5,6,7
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a;
scanf("%d",&a);
if(a>=1 && a<=6)
printf("%d",a+1);
else
printf("%d",(a+1)%7);
return 0;
}
1018 开学?
小S:终于可以开学啦!好开心啊!
小Y:你没看新闻吗,开学日期又延后了。
小S:NOOOOOOOOOOOOOOOO!
小S知道原计划星期X开学,通知开学时间延期N天,请问开学日期是星期几(星期日用7表示)?
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int x,n;
scanf("%d %d",&x,&n);//(1≤X≤7, 1≤N≤1000)
if((x+n)%7 < 7&&(x+n)%7 >= 1)
printf("%d",(x+n)%7);
else//能被7整除
printf("7");
return 0;
}
1019 helloworld
大家c语言的学的第一个程序应该就是输出hello world,我们知道每一个字符都有一个ASCII码,请你输出
hello world每一个字符的ASCII码+1对应的那个字符.比如a对应ASCII码的下一个字符是b.
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <math.h>
#include <iomanip>
#include <fstream>
#include <algorithm>
using namespace std;
int main(){
string s="hello world";
int i;
for(i=0;i<s.length();i++){
char c=s[i];
char d=s[i]+1;
cout << d;
}
return 0;
}
1020 a+b
输入两个十进制的a,b.输出a+b的十六进制表示.
#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <math.h>
#include <iomanip>
#include <fstream>
#include <algorithm>
using namespace std;
int main(){
int a,b;
cin >> a >> b;
int c=a+b;
//输出c的十六进制表示
char arr[100];//存储十六进制的各个位数
char x;
int y,k=0;
if(c==0){
cout << 0 << endl;
} else{
while(c){//当商不为0时
y=c%16;
if(y<10){
arr[k++]='0'+y;
}else{
arr[k++]='a'+y-10;
}
c=c/16;
}
}
for(int i=k-1;i>=0;i--)
cout << arr[i];
return 0;
}
1047 得不到的爱情
Chranos是个数学天才。
一天,有一个可爱的小女孩追求Chranos,他知道Chranos最喜欢当且仅当总质量为K克的时候的番茄炒蛋了。她希望通过美食俘获Chranos的胃,这样就一定可以和他在一起了吧!虽然小女孩有无限数量的食材,但是数学王国的番茄和蛋非常特殊,他们的质量分别为N克和M克。为了表现一颗完整的心、表达充足的爱意,所有的食材必须被用完。N和M都是正整数且互素,制作过程中既不会凭空增加质量,也不会凭空消失质量。
Chranos不希望小女孩打扰他学数学。他发现,并不是所有番茄炒蛋都是可以被制作出来的。他想找出最大的不可以被制作出的总质量K来拒绝小女孩,这样Chranos就可以永远和数学在一起了!
#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <math.h>
#include <iomanip>
#include <algorithm>
using namespace std;
int main(){
//塞瓦维斯特定理:对于ax+by=c式子,
//当a,b均大于1且a,b互为素数(最大公约数==1),
//满足方程无整数解的c的最大值为a*b-a-b。
//用int不行
long n,m;
cin >> n >> m;
long k=n*m-n-m;
cout << k << endl;
return 0;
【入门2】分支结构
人们在人生中需要做出许多选择,小到考虑晚上吃什么,大到决定高考志愿填报的学校。只有一次次选择后才能带来无限可能,我们要根据自己掌握的情况,做出最佳的选择。
程序的执行也不是一成不变的,往往会要求程序能够在不同的场合下有不同的动作。这时就需要在代码中使用条件语句来做出不同的选择。比如说,登录洛谷网时,网站后台会将你提交的用户名和密码在后台数据库中看看是否匹配,如果能够匹配就登陆成功,否则就登陆失败。这一章就来介绍如何让程序做出选择。
https://www.luogu.com.cn/problem/solution/P2433 # 【深基1-2】小学数学 N 合一 ## 题目描述 ### 问题 1 请输出 `I love Luogu!` ### 问题 2 这里有 $10$ 个苹果,小 A 拿走了 $2$ 个,Uim 拿走了 $4$ 个,八尾勇拿走剩下的所有的苹果。我们想知道: 1. 小A 和 Uim 两个人一共拿走多少苹果? 2. 八尾勇能拿走多少苹果? 现在需要编写一个程序,输出两个数字作为答案,中间使用空格分开。 ### 问题 3 现在有 $14$ 个苹果。要均分给 $4$ 名同学,分不掉的苹果放回冰箱。请问: 1. 每位同学能分得几个苹果? 2. 一共分出去多少苹果? 3. 把几个苹果放回冰箱? 现在需要编写一个程序,输出三个数字作为答案,每个数字一行。 ### 问题 4 现在有 $500$ 毫升的肥宅快乐水,要均分给 $3$ 名同学,每位同学可以分到多少毫升?请输出一个数字作为输出。保留 $6$ 位有效数字,且不使用科学计数法。 ### 问题 5 甲列火车长 $260$ 米,每秒行 $12$ 米;乙列火车长 $220$ 米,每秒行 $20$ 米,两车相向而行,从两车车头相遇时开始计时,多长时间后两车车尾相离?已知答案是整数。 ### 问题 6 一个长方形长宽分别是 $6 \text{ cm}$、$9 \text{ cm}$,求它的对角线长度($\text{cm}$)。直接使用 `cout` 输出。 ### 问题 7 Uim 银行账户里面有 $100$ 元。经过了下面的操作: 1. 往里面存了 $10$ 元; 2. 购物花掉了 $20$ 元; 3. 把里面的钱全部取出。 请在每次操作后输出账户余额,并使用换行符隔开。 ### 问题 8 当半径为 $r=5$,请输出圆的周长、面积和球体积。取 $\pi=3.141593$。请直接使用 `cout` 输出答案,每行一个数字。 ### 问题 9 一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;第二天他也刚好吃了剩余桃子的一半,贪嘴多吃了一个;第三天他又刚好吃了剩下的桃子的一半,并贪嘴多吃了一个。第四天起来一看,发现桃子只剩下一个了。请问小猴买了几个桃子? ### 问题 10 洛谷的评测任务是单位时间内均匀增加的。$8$ 台评测机 $30$ 分钟可以刚好把评测队列中的程序评测完毕,$10$ 台评测机 $6$ 分钟可以刚好把评测队列中的程序评测完毕,请问几台评测机可以在 $10$ 分钟时刚好把评测队列中的程序评测完毕? ### 问题 11 小 A 跑步速度 $5 \text{ m/s}$,八尾勇跑步速度 $8 \text{ m/s}$,八尾勇在小 A 后面 $100 \text{ m}$,他们同时起跑,请问需要多长时间八尾勇可以追上小 A?输出一个数字表示答案,使用 `cout` 直接输出。 ### 问题 12 大家都知道有 $26$ 个英文字母,其中 A 是第一个字母。现在请编程求出: 1. M 是字母表中的第几个字母? 2. 第 $18$ 个字母是什么? 输出一个数字和一个字母,使用换行隔开。 ### 问题 13 小 A 有两块球形橡皮泥,一个半径是 $4$,一个半径是 $10$。他想把这两块橡皮泥揉在一起,然后塑造成一个正方体,请问这个正方体的棱长是多少?如果结果不是整数,则舍去小数点之后的数字。取 $\pi = 3.141593$。 ### 问题 14 根据咕咕网校的预测,当课程定价为 $110$ 元时,会有 $10$ 人报名。如果课程价格每降低 $1$ 元,就会多 $1$ 名报名者(反之亦然)。如果希望总共能收到 $3500$ 元学费的话,那么应该定价多少呢?已知本题有两个答案符合要求,则取较小的那一个。如果这个答案不是整数,则需四舍五入精确到整数。 ## 输入格式 输入一个正整数,表示第几个问题。 ## 输出格式 根据所输入的问题编号,输出对应问题的答案。 ## 样例 #1 ### 样例输入 #1 ``` 2 ``` ### 样例输出 #1 ``` 6 4 ``` ## 提示 请解决以下小学数学题。你可以提交答案,也可以写一个程序。 对于本题来说,如果你不知道怎么输入,也可以这么抄: ``` #include<iostream> // 填上你觉得需要的其他头文件 using namespace std; int main() { int T; cin >> T; if (T == 1) { // 粘贴问题 1 的主函数代码,除了 return 0 cout << "I love Luogu!"; } else if (T == 2) { // 粘贴问题 2 的主函数代码,除了 return 0 cout << 2 + 4 << " " << 10 - 2 - 4; } else if (T == 3) { // 请自行完成问题 3 的代码 } else if (T == 4) { // 请自行完成问题 4 的代码 } else if (T == 5) { // 请自行完成问题 5 的代码 } else if (T == 6) { // 请自行完成问题 6 的代码 } else if (T == 7) { // 请自行完成问题 7 的代码 } else if (T == 8) { // 请自行完成问题 8 的代码 } else if (T == 9) { // 请自行完成问题 9 的代码 } else if (T == 10) { // 请自行完成问题 10 的代码 } else if (T == 11) { // 请自行完成问题 11 的代码 } else if (T == 12) { // 请自行完成问题 12 的代码 } else if (T == 13) { // 请自行完成问题 13 的代码 } else if (T == 14) { // 请自行完成问题 14 的代码 } return 0; } ```
总之,这题可以说是洛谷入门赛史上最难,最坑,最不容易AC的简单题了,反正在考场上本人调了一个小时才调出来,既然如此,发篇题解吐槽一下吧! Problem 1 这个没啥好说的,直接: cout << "I love Luogu!"; Problem 2 这个也是比较简单的问题,并且题目已经给你答案了,就不做过多注解了 cout << 2 + 4 << " " << 10 - 2 - 4; Problem 3 这个也是小学数学: 14 ÷ 3 = 4 ⋯ 2 14÷3=4⋯2 (既然是小学数学,那就按照小学的格式写吧) 然后就迎刃而解了,分别是3,12,2 Problem 4 这个题也不难,但是有一个超!级!大!坑!点!!!! 保留6位有效数字 6位有效数字! 有效数字!!!!! 有效数字!!!!! 有效数字包括整数部分和小数部分 包括整数部分 包括整数部分 500 ÷ 3 = 166.6666666 ⋯ 500÷3=166.6666666⋯ 前面的166也属于有效数字的一部分! 所以这个题 不是保留6位小数 不是保留6位小数, 而是3位小数 而是3位小数!!! 众所周知,printf是比cout快的,而且cout保留小数还要用iomanip里又臭又长的控制符,所以我们在这里就用cout啦! cout<<fixed<<setprecision(3)<<1.0*500/3; Problem 5 第五题是一个典型的小学奥数的大坑——行程问题! 至于行程问题到底要注意什么,为什么不问问神奇海螺呢? 神奇海螺告诉我们: 相遇问题:路程和 = 时间 × 速度和 相遇问题:路程和=时间×速度和 火车过桥问题:总路程 = 车长 + 桥长 火车过桥问题:总路程=车长+桥长 所以根据神奇海螺的提示,这题就是一个相遇问题,而路程和就是两辆车的长度之和 所以套用相遇问题的公式,就珂以直接得出答案啦! cout<<(220+260)/(20+12); Problem 6 到目前为止都是小学数学,但是第六题开始,出题人就逐渐忘记了标题…… 这个题如果你是小学生的话,没准还真做不出来(当然,热爱提前学习的小学生除外)——因为这涉及到一个初中数学中一个非常重要的几何问题——勾股定理 勾股定理:在一个直角三角形中,两直角边的平方和等于斜边的平方 这样的话,答案就应该等于 6 2 + 9 2 6 2 +9 2 cout<<sqrt(6*6+9*9); Problem 7 第7题这还算是是小学数学,一年级的加减法即可 答案就是110,90,0 Problem 8 这个题的话,前两问还算是小学数学,但是在后面的话,球体的体积公式可能就有人不知道了 圆的周长: � = 2 � � 圆的周长:C=2πr 圆的面积: � = � � 2 圆的面积:S=πr 2 球的体积: � = 4 3 � � 3 球的体积:V= 3 4 πr 3 其它要注意的就是**3/4一定要强转成double!**至于怎么转,乘1.0就好啦! cout<<pi*10<<endl<<pi*25<<endl<<4/3*pi*125<<endl; 当然像圆周率 � π这种东西还是定义一下好: const double pi=3.141593; Problem 9 如果你是入门赛的忠实粉丝的话,你会发现这个题是上次- P5743 【深基7.习8】猴子吃桃的弱化版 这个题又直接指向小学奥数的另一类问题:用倒推法解还原问题 还原问题,就是已知最后的状态,倒推出一开始的状态 怎么倒推呢,总结成一句话:拿了我的给我送回来,吃了我的给我吐出来 也就是说,我们可以从最后的一个桃子出发,由于是吃了一半,又吃了一个桃子,所以我们倒推的话就是先把那一个桃子加回去,再把桃子变成2倍,也就是加1,乘2 cout<<((((1+1)*2)+1*2)+1)*2; 当然你也可以写个循环,甚至用递归……总之最后可以得到答案22 Problem 10 这个题是我要重点讲的——这个题算是小学奥数最难也不为过了。没错,它就是臭名昭著,令人闻风丧胆的——牛吃草问题! 牧场上有一片青草,每天都生长得一样快。这片青草供给10头牛吃,可以吃22天,或者供给16头牛吃,可以吃10天,期间一直有草生长。如果供给25头牛吃,可以吃多少天? 看出相似度来了吧?说句题外话,这题是由牛顿大爷提出的,所以又叫牛顿问题 那这种问题究竟要怎么解呢???让我们慢慢来: 首先,我们设每头牛(评测机)一天能吃一份艹(评测任务) 求出每天增长的艹的数量 首先,第一组例子就是 8 8头牛 30 30天吃了 30 × 8 = 240 30×8=240份艹,第二组例子就是 10 10头牛 6 6天吃了 6 × 10 = 60 6×10=60份艹 这 240 240份艹,是原有的艹+ 30 30天增长的艹 这 60 60份艹,是原有的艹+ 6 6天增长的艹 也就是说:在 30 − 6 = 24 30−6=24天里,增长了 240 − 60 = 180 240−60=180份艹 所以说每天就增加了 180 ÷ 24 = 7.5 180÷24=7.5份艹 求出原有的艹的数量 这个就简单些了:根据刚才的式子,我们可以求出来: 原有的艹 = =总共的艹 − −增长的艹 所以从第一个式子看出:原有的艹 = =总共的 240 240份艹 − −增长的 30 × 7.5 = 225 30×7.5=225份艹 = 15 =15份艹 3.通过最后的条件,最终解决问题 要求的东西,翻译成“牛吃草语言”就是: 几头牛才能吃 10 10天的艹? 首先,这 10 10天的艹要分成 2 2部分:原有的 15 15份艹和每天增长的 7.5 7.5份艹 对应的,这些牛也要分成两拨去完成吃艹的任务 首先,这增长的 7.5 7.5份艹,要派 7.5 7.5头牛天天吃,一直吃(7.5头?……不要在意这些细节,反正最后算出来是个整数) 那原有的15份艹,要10天吃完,需要派 15 ÷ 10 = 1.5 15÷10=1.5头牛 所以一共就是 7.5 + 1.5 = 9 7.5+1.5=9头牛,完美! 当然,如果你的数学有初中水平的话,你还可以列一个二元一次方程组,设原有 � x份艹,每天增长 � y份艹,可以得到一下方程组: � + 30 � = 30 × 8 x+30y=30×8 � + 6 � = 6 × 10 x+6y=6×10 (不会用 LaTeX L A T E X打方程组……哭唧唧) 然后可以解得 � = 15 x=15 � = 7.5 y=7.5 和上面的小学生方法是完全一样的! update: 后来看了其它小伙伴们的题解,发现这题有个神奇的做法—— 肉眼可见,评测机越多,用时越短,既然评测时间 6 < 10 < 30 6<10<30,所以评测机数量 10 > � > 8 10>x>8,评测机你总不可能开半台吧,所以答案一定是9 啊……我辛辛苦苦写的;牛吃草……白做了…… Problem 11 这个又双叒叕是行程问题,这次是追及问题!,公式是: 路程差 ÷ 速度差 = 追及时间 路程差÷速度差=追及时间 很好理解!还可以类比刚才的相遇问题一起记! 那就简单啦,记得转成double cout<<1.0*100/3; Problem 12 出题人都已经偏题偏到开普勒-452b行星了,这题不考数学,改考英语了! 有点英语知识的都知道:答案分别是 13 13和 � R 当然你也可以利用int类型和char类型的转换做题: cout<<(int)('M'-'A')+1<<endl<<(char)(18+'A'-1); Problem 13 这个题算是Problem 8的升级版,也算是小学五年级应用题的思想,利用体积相同转化问题,再来复习一下公式: 球的体积: � = 4 3 � � 3 球的体积:V= 3 4 πr 3 正方体的体积: � = � 3 正方体的体积:V=a 3 但是问题来了,根据体积求边长需要三次根号,但是cmath里面没有三次根号的函数啊,不过没关系: � � � = � � � a n m = n a m 所以嘛, 3 � = � 1 3 3 V =V 3 1 ,用pow函数就可以解决! (话说分数指数幂是高中数学内容哎,你确定是小学数学???) cout<<(int)(pow(4/3*pi*(4*4*4+10*10*10),1.0*1/3)); Problem 14 天哪!现在小学都学一元二次方程了吗?! 没错,这题确实是一道经典的一元二次方程的应用题——薄利多销问题,利润减小,销量随之增大,是典型的二次方程! 那这题我们就设降价 � x元,这样的话售价 110 + � 110+x元,报名 10 − � 10−x人,总价=单价 × ×数量,列出方程—— ( 110 + � ) ( 10 − � ) = 3500 (110+x)(10−x)=3500 1100 + 10 � − 110 � − � 2 = 3500 1100+10x−110x−x 2 =3500 − � 2 + 100 � − 2400 = 0 −x 2 +100x−2400=0 解方程的话,我们用因式分解法吧! ( � − 40 ) ( � − 60 ) = 0 (x−40)(x−60)=0 � 1 = 40 , � 2 = 60 x 1 =40,x 2 =60 也就是说售价分别为 70 70元和 50 50元,取较小的 50 50元 但问题来了,如果你不会解一元二次方程咋办呢? 然而我们可以枚举啊! 然而我们可以枚举啊! ——vectorwyx ——vectorwyx 历经九九八十一难,我们终于可以A掉这个题了!
P5709 【深基2.习6】Apples Prologue / 苹果和虫子
# 【深基2.习6】Apples Prologue / 苹果和虫子 ## 题目描述 八尾勇喜欢吃苹果。她现在有 $m$($1 \le m \le 100$)个苹果,吃完一个苹果需要花费 $t$($0 \le t \le 100$)分钟,吃完一个后立刻开始吃下一个。现在时间过去了 $s$($1 \le s \le 10000$)分钟,请问她还有几个完整的苹果? ## 输入格式 输入三个**非负整数**表示 $m, t, s$。 ## 输出格式 输出一个整数表示答案。 ## 样例 #1 ### 样例输入 #1 ``` 50 10 200 ``` ### 样例输出 #1 ``` 30 ``` ## 提示 如果你出现了 RE,不如检查一下被零除?
题目还是挺简单的,但是要注意细节! 首先,八尾勇吃了 s/t个苹果,那么问题就来了,第一个坑:如果 t是0,那么八尾勇肯定能吃完所有的苹果,输出0,但是0又不能做除数,这种情况要特判。 接着往下想,如果 s是 t的整数倍,那么八尾勇就吃了 s/t个完整的苹果,剩下 m−s/t个完整的苹果;如果 s并不是是 t的整数倍,八尾勇就吃了 s/t个完整的苹果和一个残缺的苹果,那么就有 + 1 s/t+1个苹果不完整了,剩下 − 1 m−s/t−1个苹果。可是,第二个坑:说不定他在 s秒内就吃完了这堆苹果了呢,那么就没有剩下的苹果,输出0。 上代码: #include<bits/stdc++.h>//万能头文件 using namespace std; int m,t,s; int main() { cin>>m>>t>>s; if(t==0)//特判t=0的情况 { cout<<0<<endl; return 0; } if(s%t==0)//如果s是t的整数倍 cout<<max(m-s/t,0)<<endl; else//如果不是 cout<<max(m-s/t-1,0)<<endl; return 0;//程序结束 } 程序中max(a,b)就是a,b中的最大值,如果 m−s/t比0小,大的就是0了,输出的就是0。
P5711 【深基3.例3】闰年判断
# 【深基3.例3】闰年判断 ## 题目描述 输入一个年份,判断这一年是否是闰年,如果是输出 $1$,否则输出 $0$。 ## 输入格式 输入一个正整数 $n$,表示年份。 ## 输出格式 输出一行。如果输入的年份是闰年则输出 $1$,否则输出 $0$。 ## 样例 #1 ### 样例输入 #1 ``` 1926 ``` ### 样例输出 #1 ``` 0 ``` ## 样例 #2 ### 样例输入 #2 ``` 1900 ``` ### 样例输出 #2 ``` 0 ``` ## 样例 #3 ### 样例输入 #3 ``` 2000 ``` ### 样例输出 #3 ``` 1 ``` ## 样例 #4 ### 样例输入 #4 ``` 1996 ``` ### 样例输出 #4 ``` 1 ``` ## 提示 数据保证,$1582 \leq n \leq 2020$ 且年份为自然数。
//很水但是有时记不住 这题作为入门赛第2题,难度还是很水的。 就让你判断n是否为闰年,是输出1,否则输出0。 只需要理解闰年是什么就可以了。(自己问度娘去) 判断闰年方法:是4的倍数但不是100的倍数,或者是400的倍数。 参考代码: #include<bits/stdc++.h> using namespace std; int n; int main() { cin>>n; cout<<((n%4==0&&n%100!=0)||(n%400==0))?1:0; return 0; }
P5713 【深基3.例5】洛谷团队系统
# 【深基3.例5】洛谷团队系统 ## 题目描述 在洛谷上使用团队系统非常方便的添加自己的题目。如果在自己的电脑上配置题目和测试数据,每题需要花费时间 $5$ 分钟;而在洛谷团队中上传私有题目,每题只需要花费 $3$ 分钟,但是上传题目之前还需要一次性花费 11 分钟创建与配置团队。现在要配置 $n$ 道题目,如果本地配置花费的总时间短,请输出 `Local`,否则输出 `Luogu`。 ## 输入格式 输入一个正整数 $n$,表示需要配置的题目量。 ## 输出格式 输出一行,一个字符串。如果本地配置花费的总时间短,请输出 `Local`,否则输出 `Luogu`。 ## 样例 #1 ### 样例输入 #1 ``` 2 ``` ### 样例输出 #1 ``` Local ``` ## 样例 #2 ### 样例输入 #2 ``` 50 ``` ### 样例输出 #2 ``` Luogu ``` ## 提示 数据保证 $1 \leq n\leq 100$。
#include<iostream> using namespace std; int a;//a是题目数 int main(){ cin>>a; if(a*5<=a*3+11){//判断谁大谁小 cout<<"Local"<<endl; }else{ cout<<"Luogu"<<endl; } return 0;//拜拜! }
P1085 [NOIP2004 普及组] 不高兴的津津
# [NOIP2004 普及组] 不高兴的津津 ## 题目描述 津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。 ## 输入格式 输入包括 $7$ 行数据,分别表示周一到周日的日程安排。每行包括两个小于 $10$ 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。 ## 输出格式 一个数字。如果不会不高兴则输出 $0$,如果会则输出最不高兴的是周几(用 $1, 2, 3, 4, 5, 6, 7$ 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。 ## 样例 #1 ### 样例输入 #1 ``` 5 3 6 2 7 2 5 3 5 4 0 4 0 6 ``` ### 样例输出 #1 ``` 3 ``` ## 提示 NOIP2004 普及组第 1 题 - 2021-10-27:增加一组 hack 数据 - 2022-06-05:又增加一组 hack 数据
#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; //作为新手的我会的都写上 int main () { int a,b,s,max=0,i,day=0; //a,b是我们津津(以下简称JJ)每天上课时间,s意为sum是上课时间之和 for (i=1;i<8;i++) // i为循环变量,day是JJ一周最不高兴的一天 { cin>>a>>b; //输入a,b s=a+b; //计算一天的上课时间 if ((s>max)&&(s>8)) max=s,day=i; //在超过8小时且比之前几天都大的s时,将s赋给最大值,并记录下JJ的这天 } cout<<day; //由于day初值是0,所以如果JJ一周都开心就输出0 return 0; }
P1422 小玉家的电费
# 小玉家的电费 ## 题目描述 夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电 [2006]27 号规定,月用电量在 $150$ 千瓦时及以下部分按每千瓦时 $0.4463$ 元执行,月用电量在 $151\sim 400$ 千瓦时的部分按每千瓦时 $0.4663$ 元执行,月用电量在 $401$ 千瓦时及以上部分按每千瓦时 $0.5663$ 元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。 ## 输入格式 输入一个正整数,表示用电总计(单位以千瓦时计),不超过 $10000$。 ## 输出格式 输出一个数,保留到小数点后 $1$ 位(单位以元计,保留到小数点后 $1$ 位)。 ## 样例 #1 ### 样例输入 #1 ``` 267 ``` ### 样例输出 #1 ``` 121.5 ```
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> using namespace std; int main() { double s;//双精度浮点数 int n; cin>>n; if (n>400) s=150*0.4463+250*0.4663+(n-400)*0.5663; else if (n>150) s=150*0.4463+(n-150)*0.4663; else s=n*0.4463; //s为未四舍五入的电费 cout<<floor(s*10+0.5)/10.0;//返回s四舍五入小数点后第二位的结果。 return 0; }
P1424 小鱼的航程(改进版)
# 小鱼的航程(改进版) ## 题目背景 ## 题目描述 有一只小鱼,它平日每天游泳 $250$ 公里,周末休息(实行双休日),假设从周 $x$ 开始算起,过了 $n$ 天以后,小鱼一共累计游泳了多少公里呢? ## 输入格式 输入两个正整数 $x,n$,表示从周 $x$ 算起,经过 $n$ 天。 ## 输出格式 输出一个整数,表示小鱼累计游泳了多少公里。 ## 样例 #1 ### 样例输入 #1 ``` 3 10 ``` ### 样例输出 #1 ``` 2000 ``` ## 提示 数据保证,$1\le x \le 7$,$1 \le n\le 10^6$。
这道题目挺简单的,就看你有没有仔细审题。天数都那么大了,总路程还会小吗???嘿嘿嘿。 #include<bits/stdc++.h> //包含了所有C++头文件的头文件 using namespace std; int main() { unsigned long long n,ans=0; //坑就坑在这儿。天数都那么大了,总路程还会小吗??? int x; cin >> x >> n; //输入星期和持续天数 for(int i=0;i<n;i++) { if((x!=6)&&(x!=7)) //只要星期不等于6和7 ans += 250; //总长度增加250 if(x==7) //当x等于7的时候 x=1; // x归位为1 else //其他情况下(x不等于7的时候) x++; //x自加1 } cout << ans; //输出总路程 return 0; }
P1055 [NOIP2008 普及组] ISBN 号码
# [NOIP2008 普及组] ISBN 号码 ## 题目描述 每一本正式出版的图书都有一个 ISBN 号码与之对应,ISBN 码包括 $9$ 位数字、$1$ 位识别码和 $3$ 位分隔符,其规定格式如 `x-xxx-xxxxx-x`,其中符号 `-` 就是分隔符(键盘上的减号),最后一位是识别码,例如 `0-670-82162-4`就是一个标准的 ISBN 码。ISBN 码的首位数字表示书籍的出版语言,例如 $0$ 代表英语;第一个分隔符 `-` 之后的三位数字代表出版社,例如 $670$ 代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。 识别码的计算方法如下: 首位数字乘以 $1$ 加上次位数字乘以 $2$ ……以此类推,用所得的结果 $ \bmod 11$,所得的余数即为识别码,如果余数为 $10$,则识别码为大写字母 $X$。例如 ISBN 号码 `0-670-82162-4` 中的识别码 $4$ 是这样得到的:对 `067082162` 这 $9$ 个数字,从左至右,分别乘以 $1,2,\dots,9$ 再求和,即 $0\times 1+6\times 2+……+2\times 9=158$,然后取 $158 \bmod 11$ 的结果 $4$ 作为识别码。 你的任务是编写程序判断输入的 ISBN 号码中识别码是否正确,如果正确,则仅输出 `Right`;如果错误,则输出你认为是正确的 ISBN 号码。 ## 输入格式 一个字符序列,表示一本书的 ISBN 号码(保证输入符合 ISBN 号码的格式要求)。 ## 输出格式 一行,假如输入的 ISBN 号码的识别码正确,那么输出 `Right`,否则,按照规定的格式,输出正确的 ISBN 号码(包括分隔符 `-`)。 ## 样例 #1 ### 样例输入 #1 ``` 0-670-82162-4 ``` ### 样例输出 #1 ``` Right ``` ## 样例 #2 ### 样例输入 #2 ``` 0-670-82162-0 ``` ### 样例输出 #2 ``` 0-670-82162-4 ``` ## 提示 2008 普及组第一题
https://www.luogu.com.cn/problem/solution/P1055 #include <stdio.h>//代码简洁明了(个人观点) int main(void){ char a[14], mod[12] = "0123456789X"; //先将mod11后的十一个字符存入数组 gets(a); //输入字符串 int i, j = 1, t = 0; for(i = 0; i < 12; i++) { if(a[i] == '-') continue; //字符串为分隔符‘-’时跳过此次循环进入下一次循环 t += (a[i]-'0')*j++; //t储存 第j个 数字 * j 的和 } if(mod[t%11] == a[12]) printf("Right"); else { a[12] = mod[t%11]; //若识别码错误,则赋正确的识别码,然后输出 puts(a); } return 0; }