C++微基础备战蓝桥杯9.17
for循环的语法形式
//形式 1
for
循环是三种循环中使用最多的,for循环的语法形式如下:
for(表达式1; 表达式2; 表达式3)
语句;
//形式2
//如果循环体想包含更多的语句,可以加上大括号
for(表达式1; 表达式2; 表达式3)
{
语句1;
语句2;
...
}
//求和,计算1~100之间的3的倍数的数字之和
//--产生1~100之间的数字--for
//判断是否为3的倍数
//相加 sum +=i;
#include <iostream>
using namespace std;
int main()
{
int i = 0;
int sum = 0;
for(i = 1;i <= 100; i++)
{
//判断
if(i % 3 == 0)
sum += i;
}
cout << sum << endl;
return 0;
}
//另一个方法
//直接产生3的倍数相加
int main()
{
int i = 0;
int sum = 0;
for(i = 3;i<=100;i+=3)
{
sum += i;
}
cout << sum << endl;
return 0;
}
这个方法更加简便,循环次数少
这便是算法,使用不同的算法计算一个题目,不断的精进自己的算法能力
//求评均年龄
//班上有若干名学生,给出每名学生的年龄(整数)
//求班上学生的平均年龄,保留小数点后两位
//输入--第一行有一个整数n,表示学生人数,
//其后n行每行有一个整数,表示每个学生的年龄,取值15~25
//输出一行,包含一个浮点数,保留小数2位
#include <iostream>
using namespace std;
int main()
{
int age;
int sum;
int n;
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> age;
sum += age;
}
printf("%.2f\n",sum * 1.0 / n);
return 0;
}
//使用while循环
int main()
{
int age;
int sum;
int n;
cin >> n;
int m = n;
while(m--)
{
cin >> age;
sum += age;
}
printf("%.2f\n",sum * 1.0 / n);
return 0;
}
求奖牌问题
//2008 年北京奥运会,A 国的运动员参与了 n 天的决赛项目 (1≤n≤100)。
//现在要统计一下 A 国所获得的金、银、铜牌数目及总奖牌数。
//输入第 1 行是 A 国参与决赛项目的天数 n,其后 n 行,
//每一行是该国某一天获得的金、银、铜牌数目(不超过 100)。
//输出 4 个整数,
//为 A 国所获得的金、银、铜牌总数及总奖牌数。
//输入
//第 1 行是 A 国参与决赛项目的天数 n,其后 n 行,
//每一行是该国某一天获得的金、银、铜牌数目,
//以一个空格分开。
//输出
//输出 1 行,包括 4 个整数,
//为 A 国所获得的金、银、铜牌总数及总奖牌数,
//以一个空格分开
#include <iostream>
using namespace std;
int a,b,c;//--每一天的奖牌数
int p1,p2,p3;
//--金-银-铜
int sum;
int main()
{
int n = 0;
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> a >> b >> c;
//累计奖牌
p1 += a;
p2 += b;
p3 += c;
}
//求和
sum =p1 + p2 + p3;
cout << p1 <<" "<< p2 << " " << p3 << " " << sum <<endl;
return 0;
//鸡尾酒疗法
//假设鸡尾酒疗法的有效率为 x,
//新疗法的有效率为 y,
//如果 y-x 大于 5%,则效果更好,
//如果 x-y 大于 5%,则效果更差,否则称为效果差不多。
//下面给出 n 组临床对照实验,其中第一组采用鸡尾酒疗法,
//其他 n-1 组为各种不同的改进疗法。
//请写程序判定各种改进疗法效果如何。
//输入
// 第一行为整数 n(1<n≤20);
//其余 n 行每行两个整数,
//第一个整数是临床实验的总病例数(小于等于 10000),
//第二个疗效有效的病例数
//这 n 行数据中,第一行为鸡尾酒疗法的数据,
//其余各行为各种改进疗法的数据。
//5
//125 99
//112 89
//145 99
//99 97
//123 98
//输出
//有 n-1 行输出,分别表示对应改进疗法的效果:
//如果效果更好,输出 better;
//如果效果更差,输出 worse;否则输出 same。
//same
//worse
//better
//same
#include <iostream>
using namespace std;
int a,b;
//a是总病列,b有效病列
float x,y;
//x 记录的是鸡尾酒疗法的效率,y是改进组的效率
int main()
{
int n;
cin >> n;
//读取第一组数据
cin >> a >> b;
x =b * 1.0 / a;
//
for (int i = 1;i <= n-1;i++)
{
cin >> a >> b;
y = b * 1.0 / a;
if(y - x > 0.05)
cout << "better" << endl;
else if(x - y > 0.05)
cout << "worse" << endl;
else
cout << "same" << endl;
}
return 0;
}
救援
救生船从大本营出发,营救若干屋顶上的人回到大本营,屋顶数目以及每个屋顶的坐标。
和人数都将由输入决定,求出所有人都到达大本营并登陆所用的时间。
在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,以速度 50 米 / 分钟驶向下一个屋顶,达到一个屋顶后,救下其上的所有人,每人上船 1 分钟,船原路返回,达到大本营,每人下船 0.5 分钟。假设原点与任意一个屋顶的连线不穿过其它屋顶。
输入格式
第一行,一个整数,表示屋顶数 n。
接下来依次有 n 行输入,每一行上包含两个表示屋顶相对于大本营的平面坐标位置的实数(单位是米)、一个表示人数的整数,数之间以一个空格分开。
输出格式
一行,救援需要的总时间,精确到分钟(向上取整)。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
//cout << ceil(6.5) << endl;
cout << ceil(2.3) << endl;//3
cout << ceil(3.8) << endl;//4
cout << ceil(-2.3) << endl;//-2
cout << ceil(-3.8) << endl;//-3
//向上取整--ceil
return 0;
}
//向下取整 --floor
int main()
{
//cout << ceil(6.5) << endl;
cout << floor(2.3) << endl;//2
cout << floor(3.8) << endl;//3
cout << floor(-2.3) << endl;//-3
cout << floor(-3.8) << endl;//-4
//向上取整--ceil
return 0;
}
//理清思路
//输入n
//循环n次
//每一次处理一个屋顶x,y,m
//计算距离
//计算时间
//时间累加
//输出时间-向上取整
#include <iostream>
#include <cmath>
using namespace std;
double x,y;//坐标
int m;//人数
float t;//距离
int main()
{
int n;
cin >> n;
for(int i =1;i <= n;i++)
{
cin >> x >> y >> m;
float dis = sqrt(x * x + y * y);
t += (dis * 2 / 50 + m * 1.5);
//累加
}
cout << (int)ceil(t) << endl;
return 0;
}
计算分数加减表达式的值
Sn=1/1−1/2+1/3−1/4+1/5+...+(−1)^n−1×1/n。
输入一个整数 n,求 Sn。
输入格式
输入为一行,含一个正整数 n。
输出格式
输出为一行,为 Sn 的值,结果保留小数点后 4 位小数。
//计算分数加减表达式的值
//每一项的分子是1
//每一项的分母是变化的,1~n---借助与循环产生分母
//加减交替
#include <iostream>
using namespace std;
int main()
{
int n = 0;
double sn = 0;
int flag = 1;
cin >> n;
for(int i =1;i <= n;i++)
{
sn +=flag * 1.0 / i;
flag = -flag;
//--加减交替
}
printf("%.4f\n",sn);
return 0;
}
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n = 0;
double sn = 0;
cin >> n;
for(int i =1;i <= n;i++)
{
sn += pow(-1,i-1) * 1.0 / i;
//pow(x,y)--x的y次方
}
printf("%.4f\n",sn);
return 0;
}
分数序列求和
有一个分数序列 q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,...,,其中 qi+1=qi+pi,pi+1=qi,p1=1,q1=2。比如这个序列前 6 项分别是 2/1,3/2,5/3,8/5,13/8,21/13.。求这个分数序列的前 n 项之和。
输入格式
输入一行一个正整数 n(n≤30)。
输出格式
输出一行一个浮点数,表示分数序列前 n 项的和,精确到小数点后 4 位。
#include <iostream>
#include <cstdio>
using namespace std;
///输入n
//循环n次,求n项之和
//每次循环进入:计算1项
//q/p
//计算下一项的q和p
//输出
int main()
{
int n= 0;
double sum = 0;
double p = 1;
double q =2;
cin >> n;
for(int i = 1;i <= n;i++)
{
//产生一项,并累加求和
sum += q / p;
//为下一项准备好q和p
q = q + p;
//q = 3 ;p =1;
p = q - p;
}
printf("%.4f\n",sum);
return 0;
}
更多推荐


所有评论(0)