例30.1
解题思路:
1.读取输入的x和n,x是求平方根的数,n是迭代次数。
2.初始化迭代的初值y0=1.0。
3.使用for循环实现n次迭代,按照公式yn+1=(yn + x/yn)/2进行迭代计算。
4.每次迭代计算出的yn越来越接近平方根真实值。
5.循环结束后,y存储的就是n次迭代后的近似结果。
6.输出结果时设置小数点后三位,使用fixed和setprecision函数格式化输出。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
//读取输入
int x, n;
cin >> x >> n;
//初始化初值
double y = 1.0;
//for循环实现n次迭代
for (int i = 1; i <= n; i++) {
y = (y + x / y) / 2.0; //迭代公式
}
//格式化输出结果
cout << fixed << setprecision(3) << y;
return 0;
}
例30.2
这个问题描述的是小明学习如何对一个数进行减一操作时的错误。小明对数字进行如下操作:
1.如果一个数的个位不是0,他会将这个数减去1。
2.如果一个数的个位是0,他会将这个数除以10。
我们需要根据给定的数字n和操作次数k,计算小明进行k次这样的操作后得到的结果数值。
解题思路:
1.使用while循环重复执行k次操作。
2.在每次循环中,先用n除以10的余数判断个位是否为0。
3a.如果个位不是0,则对n进行减1操作。
3b.如果个位是0,则将n除以10。
4.循环结束后,n存储的就是经过k次操作后的结果数值。
#include <iostream>
using namespace std;
int n, m;
int main(){
cin >> n >> m;
while (m--) {
if (n % 10)
//如果数字个位不为0
n--;
//则对数字进行减1操作
else
//否则
n /= 10;
//将数字除以10
}
cout << n;
return 0;
}
例30.3
解题思路:
1.读取输入的正整数N,表示接下来有N行数据。
2.使用while循环重复N次,每次循环读取三个正整数a、b、c。
3.根据a的不同取值,分别进行加法、减法、乘法和除法运算。
4.根据运算结果使用cout输出。
5.循环结束后,输出换行符。
#include<iostream>
using namespace std;
long long t, a, b, c;
int main() {
cin >> t;
while (t--) {
cin >> a >> b >> c;
if (a == 1)
cout << b + c;
else if (a == 2)
cout << b - c;
else if (a == 3)
cout << b * c;
else
cout << int(b / c);
cout << '\n';
}
return 0;
}
练30.1
解题思路如下:
1.读取输入的组数n和第一组(鸡尾酒疗法)的总例数a和有效例数b。
2.根据a和b计算第一组的有效率x。
3.使用for循环读取后续各组的a和b。
4.根据每个组的a和b再计算有效率y。
5.将每个组的y与原疗法x进行比较:
A:如果y-x>5%,则新疗法效果更好,输出"better"
B:如果x-y>5%,则新疗法效果更差,输出"worse"
C:否则效果差不多,输出"same"
6.循环结束后即完成了所有组与原疗法的效果判断。
#include <iostream>
using namespace std;
int main(){
int n, i, a, b; //声明变量存储总组数、循环变量、每组总例数、有效例数
double x, y;//声明变量存储每组有效率
cin >> n >> a >> b;//读取第一组数据
x = b * 1.0 / a;//计算第一组有效率x
for (i = 1;i < n;i++){//循环处理后续组
cin >> a >> b;//读取例数
y = b * 1.0 / a;//计算有效率y
if (y - x > 0.05)
printf("better\n");//有效率提升超过5%输出better
else if (x - y > 0.05)
printf("worse\n");//有效率下降超过5%输出worse
else
printf("same\n");//否则输出same
}
return 0;
}
练30.2
解题思路:
1.读取输入的整数n和操作次数k。
2.使用while循环重复执行k次操作:
3.每次循环首先判断n个位是否为0
A:如果不为0,则对n进行减1操作
B:如果为0,则将n除以10
4.循环结束后,n存储的就是经过k次操作后的结果。
5.输出结果n。
#include <iostream>
using namespace std;
int n, m; // 声明变量n和m
int main(){
cin >> n >> m; // 读取输入的n和m
while (m--) { // 使用while循环重复m次操作
if (n % 10) // 判断n的个位是否为0
n--; // 如果个位不为0,则对n进行减1操作
else
n /= 10; // 如果个位为0,则将n除以10
}
cout << n; // 输出最终结果
return 0;
}
练30.3
解题思路:
1.定义变量n存储整数个数,sum和sum2分别统计奇数和偶数个数
2.读取n
3.使用while循环读取n个整数
4.在循环中,判断每个整数是否为奇数(取余为1),是则sum加1
5.判断是否为偶数(取余为0),是则sum2加1
6.循环结束后,输出sum和sum2,中间用空格分隔
#include <iostream>
using namespace std;
int main() {
int n, m, sum, sum2; //声明变量n存储整数个数,m临时接收整数,sum和sum2统计奇偶个数
cin >> n; //读取n
while (n--) { //使用循环读取n个整数
cin >> m; //读取每个整数
if (m % 2) {//判断是否为奇数
sum++; //是则sum加1
} else {
sum2++; //否则为偶数,sum2加1
}
}
cout << sum << ' ' << sum2;//输出结果
return 0;
}