一本通编程启蒙例30及练习题解

例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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2018/07/20 周五 12:53 354 01求平均年龄.cpp 2018/07/20 周五 12:53 327 02财务管理.cpp 2018/07/20 周五 12:53 357 03均值.cpp 2018/07/20 周五 12:53 375 04求整数的和与平均值.cpp 2018/07/20 周五 12:54 375 05最高的分数.cpp 2018/07/20 周五 12:54 371 06整数序列的元素最大跨度值.cpp 2018/07/20 周五 12:55 430 07奥运奖牌计数.cpp 2018/07/20 周五 12:55 281 08多边形内角和.cpp 2018/07/20 周五 12:55 237 09奇数求和.cpp 2018/07/20 周五 12:56 239 10满足条件的数累加.cpp 2018/07/20 周五 12:56 403 11整数的个数.cpp 2018/07/20 周五 12:56 257 12与指定数字相同的数个数.cpp 2018/07/20 周五 12:56 217 13乘方计算.cpp 2018/07/20 周五 12:57 324 14人口增长问题.cpp 2018/07/20 周五 12:57 307 15银行利息.cpp 2018/07/20 周五 12:57 433 16买房子.cpp 2018/07/20 周五 12:57 260 17斐波那契数列.cpp 2018/07/20 周五 12:58 461 18鸡尾酒疗法.cpp 2018/07/20 周五 12:58 392 19救援.cpp 2018/07/20 周五 12:58 280 20球弹跳高度的计算.cpp 2018/07/20 周五 12:58 450 21角谷猜想.cpp 2018/07/20 周五 12:59 520 22津津的储蓄计划.cpp 2018/07/20 周五 12:59 400 23药房管理.cpp 2018/07/20 周五 12:59 642 24正常血压.cpp 2018/07/20 周五 13:00 453 25求特殊自然数.cpp 2018/07/20 周五 13:00 387 26统计满足条件的4位数个数.cpp 2018/07/20 周五 13:00 244 27级数求和.cpp 2018/07/20 周五 13:00 296 28分离整数的各个数位.cpp 2018/07/20 周五 13:01 443 29数字反转.cpp 2018/07/20 周五 13:01 341 30含k个3的数.cpp 2018/06/10 周日 14:07 545 31开关灯.cpp 2018/07/20 周五 13:01 360 32求分数序列和.cpp 2018/07/20 周五 13:01 324 33计算分数加减表达式的值.cpp 2018/07/20 周五 13:02 220 34求阶乘和.cpp 2018/07/20 周五 13:02 304 35求出e的值.cpp 2018/07/20 周五 13:02 302 36计算多项式的值.cpp 2018/07/20 周五 13:03 378 37雇佣兵.cpp 2018/07/20 周五 13:03 540 38计算多项式导函数.cpp 2018/07/20 周五 13:03 377 39与7无关的数.cpp 2018/07/20 周五 13:03 331 40数1的个数.cpp 2018/07/20 周五 13:04 485 41数字统计.cpp 2018/07/20 周五 13:04 704 42画矩形.cpp 2018/07/20 周五 13:04 341 43质因数分.cpp 2018/07/20 周五 13:04 531 44第n小的质数.cpp 2018/07/20 周五 13:05 341 45金币.cpp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值