1.3 变量与常量
变量和常量:
int balance=10; 定义一个变量balance,并初始化值等于10;
const double PI = 3.14159; 定义一个常量,并初始化值等于3.14159。
常量是值不变的量,变量是值可以改变的量。
例 1-8
存钱。Uim的银行账户里面有100元。经过下面的操作:
- 往里面存了10元;
- 购物花掉了20元;
- 把里面的钱全部取出。
请在每次操作后输出账户余额,并使用换行符隔开。
解答
建模思路:
将银行卡的钱看做一个整数,每次存取看作做加法和减法。题目就转化成整型变量的加和减并求结果了。
#include<iostream>
using namespace std;
int main()
{
int balance=100;
balance+=10;
cout<<balance<<endl;
balance-=20;
cout<<balance<<endl;
balance=0;
cout<<balance<<endl;
return 0;
}
程序输出:
110
90
0
例 1-9
当半径 r=5 时,请输出圆的周长、面积和球体积。取 π=3.141593。
解答
建模思路:
根据公式,圆的周长$ C=2πr $,圆的面积$ S=πr^2 $,圆的体积$ V=\frac{4}{3}πr^3 $
题目就是将数字带入公式,就数学算式结果。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double r=5;
const double PI=3.141593;
cout<<2*PI*r<<endl;
cout<<PI*pow(r,2)<<endl;
//cout<<PI*r*r<<endl;
cout<<(4.0/3)*PI*pow(r,3)<<endl; //注意4.0,防止计算机当成整数运算。
return 0;
}
例 1-10
猴子吃桃。一只小猴买了若干桃子。
- 第一天它吃了这些桃子的一半之后,又贪嘴多吃了一个;
- 第二天它也吃了剩余桃子的一半,又贪嘴多吃了一个;
- 第三天他又吃了剩下桃子的一半,并贪嘴多吃了一个;
- 第四天起来一看,发现桃子只剩下一个了。
请问:猴子买了几个桃子?
解答
建模思路:
首先,这还是一道算术题。
但是直接算的话比较麻烦,但是将思路反过来,从最后一天倒推回去,就十分简单了。
- 第四天一个
- 第三天就是
(1+1)*2 = 4个 - 第二天就是
(4+1)*2 = 10个 - 第一天就是
(10+1)*2 = 22个
#include<iostream>
using namespace std;
int main()
{
int num=1; //第四天
num=(num+1)*2; //第三天
num=(num+1)*2; //第二天
num=(num+1)*2; //第一天
cout<<num<<endl;
return 0;
}
例 1-11
评测机队列。洛谷的评测任务是单位时间内均匀增加的。8 台评测机30 min 可以刚好把评测队列中的程序评测完毕,10 台评测机6 min 可以刚好把评测队列中的程序评测完毕。
请问:几台评测机可以在 10 min 时刚好把评测队列中的程序评测完毕?
解答
建模思路:
这是著名的“牛吃草问题”的模型。
牛吃草问题,因由牛顿提出而得名,也有人称这一类问题叫做牛顿问题。英国著名的物理学家牛顿曾编过这样一道题目:牧场上有一片青草,每天都生长得一样快。这片青草供给10头牛吃,可以吃22天,或者供给16头牛吃,可以吃10天,期间一直有草生长。如果供给25头牛吃,可以吃多少天?这种类型的题目就叫做牛顿(牛吃草)问题,亦叫做消长问题。
套用到本题,评测队列中初始有 a 条评测任务,每分钟均匀增加,则可以认为每分钟增加 b 条任务。但是我们不知道题目数量。所以可以做如下假设:
- 假设 1 台评测机 1 min 可以完成 1 份任务(包括N条评测任务);
- 那么 8 台评测机 30 min 完成了 8*30=240 份任务
- 同理 10 台评测机 6 min 完成了 10*6=60 份任务
- 两者时间上相差 30-6=24 min,任务量上相差 240-60=180 份任务
- 即可以推断出,24 min 内,均匀增加的任务为 180 份,即每 min 可以增加 180/24=7.5 份任务。
- 将每 min 增加 7.5 份的数据代入,30 min 增加的任务是 30*7.5=225 份,但一共完成了 240 份,即可以推断队列初始有任务量是 240-225=15份。
- 知道初始任务量15份,知道每 min 增加任务量 7.5 份,则可以推出 10 min 共有任务 15+(7.5*10)=90 份,我们假设的条件是 1 台评测机 1 min 做 1 份。
- 则可以推断需要的评测机数量是 90/10=9 台。
#include<iostream>
using namespace std;
int main()
{
int n1=8,t1=30,n2=10,t2=6;
int t3=10;
double inc_rate=(1.0*n1*t1 - n2*t2)/(t1-t2);
double init_num=n1*t1 - inc_rate*t1;
double ans=(init_num + t3*inc_rate)/t3;
cout<<ans;
return 0;
}

浙公网安备 33010602011771号