ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PTA基础编程题目集 7-16求符合给定条件的整数集(C++语言实现)

PTA基础编程题目集 7-16求符合给定条件的整数集(C++语言实现)

摘要:本文是PTA编程题"求整数段和"的题解,涵盖题目描述、输入输出格式及C++语言实现,展示for循环遍历、累加求和与格式化输出方法。

题目描述

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

输入格式:

输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。

输出格式:

首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。

输入样例:

-3 8

输出样例:

-3 -2 -1 0 1 2 3 4 5 6 7 8 Sum = 30

解题思路

核心问题分析

本题是一个典型的循环遍历与累加求和问题。需要完成三个核心任务:

  1. 顺序遍历输出:从整数A到整数B(包含A和B)依次输出每个整数
  2. 格式化排版:每个数字占5字符宽度、右对齐,每5个数字换一行
  3. 累加求和:计算区间内所有整数的总和,按指定格式输出

算法原理说明

使用for循环结构实现区间遍历,结合计数器与累加器实现格式化和求和:

  1. 读取区间端点A和B
  2. 使用for循环从i=A遍历到i=B:
    • 使用setw(5)设置输出宽度为5个字符,右对齐输出当前i
    • 将当前i累加到sum总和中
    • 计数器count加1,每满5个输出一个换行
  3. 循环结束后,若最后一行不足5个数字,补一个换行符
  4. 按"Sum = X"格式输出总和

具体计算步骤

  1. 输入整数A和B(保证A ≤ B)
  2. 初始化:sum=0(总和),count=0(计数器)
  3. 循环变量i从A到B:
    • 输出 setw(5) << i(5字符宽右对齐)
    • sum = sum + i(累加)
    • count = count + 1(计数)
    • 若 count % 5 == 0:输出换行(每行5个)
  4. 循环结束后,若 count % 5 != 0:补一个换行(保证最后一行完整)
  5. 输出 "Sum = " << sum << endl

验证样例:

  • 输入A=-3,B=8
  • 遍历序列:-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8(共12个数)
  • 格式化输出:
    • 第1行(1-5个):-3 -2 -1 0 1
    • 第2行(6-10个):2 3 4 5 6
    • 第3行(11-12个):7 8
  • 求和:-3-2-1+0+1+2+3+4+5+6+7+8 = (-6)+(1+2+3+4+5+6+7+8) = -6+36 = 30 ✓

代码部分实现

#include<iostream>#include<iomanip>usingnamespacestd;intmain(void){intA,B,i,sum=0,count=0;cin>>A>>B;for(i=A;i<=B;i++){cout<<setw(5)<<i;sum+=i;count++;if(count%5==0){cout<<endl;}}if(count%5!=0){cout<<endl;}cout<<"Sum = "<<sum<<endl;return0;}

代码流程说明

  1. 头文件引入与命名空间声明

    • #include <iostream>:引入标准输入输出流头文件
    • #include <iomanip>:引入输入输出格式控制头文件,提供setw()等格式化函数
    • using namespace std;:使用std命名空间
  2. 主函数入口

    • int main(void):程序主函数入口
  3. 变量定义与初始化

    • int A, B:存储区间端点A(起始整数)和B(结束整数)
    • int i:for循环的遍历变量
    • int sum = 0:累加器,存储所有整数的总和,初始值为0
    • int count = 0:计数器,统计已输出的整数个数,初始值为0
  4. 数据输入

    • cin >> A >> B;:读取两个整数A和B
  5. for循环遍历与处理

    • for (i = A; i <= B; i++)
      • 初始化:i = A(从起始整数开始)
      • 循环条件:i <= B(直到超过结束整数停止)
      • 更新:i++(每次加1)
    • 循环体内操作:
      • cout << setw(5) << i;:设置输出宽度为5个字符,右对齐输出当前整数i
        • setw(5)只对紧接着的一个输出有效,默认右对齐
      • sum += i;:将当前i累加到sum中(sum = sum + i)
      • count++;:计数器count加1
      • if (count % 5 == 0):判断是否已输出5个整数
        • cout << endl;:每满5个输出换行符
  6. 补充最后一行换行

    • if (count % 5 != 0):如果最后一行不足5个数字(即总数不是5的倍数)
      • cout << endl;:补一个换行符,确保最后一行结束后换行
  7. 输出总和

    • cout << "Sum = " << sum << endl;:按指定格式输出所有整数的总和
  8. 程序结束

    • return 0;:返回0,程序正常退出

代码流程图

否 循环结束

开始

引入头文件iostream和iomanip

定义变量 A, B, i, sum=0, count=0

输入 A 和 B

for循环: i从A到B
每次i++

i <= B?

输出 setw(5) << i

sum += i 累加

count++ 计数加1

count % 5 == 0?

输出换行 endl

本轮循环结束

i++ 回到循环判断

count % 5 != 0?

输出换行 补最后一行

输出 Sum = sum

程序结束

解题流程图

否 遍历完毕

是 继续遍历

是 满5个

否 未满

开始

读取区间端点 A 和 B

初始化 sum=0, count=0

i = A 从起始数开始

i <= B?

最后一行不满5个?

输出i占5字符宽右对齐

sum = sum + i 累加求和

count = count + 1 计数

count 是 5 的倍数?

输出换行

i = i + 1 下一个数

补一个换行

输出 Sum = 总和

结束

返回列表