文章目录
一、前言
欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》
本章节主要对循环计数求和的问题进行讲解,包括《1741 - 求出1~n中满足条件的数的个数和总和?》《1002. 编程求解1+2+3+…+n》《1004. 编程求1 * 2 * 3*…*n》《1014. 编程求1+1/2+1/3+…+1/n》《1056. 所有不超过1000的数中含有数字3的自然数》《1055. 求满足条件的整数个数》《》题目。
二、问题
问题:1741 - 求出1~n中满足条件的数的个数和总和?
类型:简单循环
题目描述:
请求出 1∼n 之间所有满足 2 的倍数但不是 3 的倍数的数,有多少个,总和是多少?
输入:
读入一个整数 n(n≤100000) 。
输出:
输出有 2 行,每行 1 个整数;
第 1 行输出满足条件的数有几个;
第 2 行输出满足条件的数的总和。
样例:
输入:
10
输出:
4
24
1.分析问题
- 已知:给定一个整数n;
- 未知:找出1到n之间所有满足既是2的倍数但又不是3的倍数的数。需要计算满足条件的数的总数(记为c)以及这些数的总和(记为s)。
2.定义变量
- n为输入值,count记录满足条件的数的数量,sum记录这些数的总和。
// 二、数据定义
int n, count = 0, sum = 0;
3.输入数据
- 从用户处获取整数n的值。
// 三、数据输入
cin >> n;
4.数据计算
- 从2开始,每次递增2(确保是2的倍数),直到n(包含n)。
- 检查当前数i是否不是3的倍数。
- 如果i不是3的倍数,则计数加1,并将其累加到总和中
// 四、数据处理与计算
for (int i = 2; i <= n; i += 2) {
if (i % 3 != 0) {
count++; // 或者使用 ++count
sum += i;
}
}
5.输出结果
- 输出满足条件的数的总数和总和,中间用换行符分隔
cout << count << endl << sum;
完整代码如下:
#include <bits/stdc++.h> // 包含常用的C++库函数
using namespace std; // 使用std命名空间,简化对标准库函数的调用
int main() {
// 一、问题分析
// 给定一个整数n,找出1到n之间所有满足既是2的倍数但又不是3的倍数的数。
// 需要计算满足条件的数的总数(记为c)以及这些数的总和(记为s)。
// 二、数据定义
int n, count = 0, sum = 0; // n为输入值,count记录满足条件的数的数量,sum记录这些数的总和
// 三、数据输入
cin >> n; // 从用户处获取整数n的值
// 四、数据处理与计算
// 从2开始,每次递增2(确保是2的倍数),直到n(包含n)
for (int i = 2; i <= n; i += 2) {
// 检查当前数i是否不是3的倍数
if (i % 3 != 0) {
// 如果i不是3的倍数,则计数加1,并将其累加到总和中
count++; // 或者使用 ++count
sum += i;
}
}
// 五、输出结果
// 输出满足条件的数的总数和总和,中间用换行符分隔
cout << count << endl << sum;
return 0; // 程序执行成功,返回0
}
欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》
问题:1002. 编程求解1+2+3+…+n
类型:简单循环
题目描述:
编程求解下列式子的值: S=1+2+3+⋯+n。
输入:
输入一行,只有一个整数 n(1≤n≤1000) 。
输出:
输出只有一行(这意味着末尾有一个回车符号),包括 1 个整数。
样例:
输入:
100
输出:
5050
1.分析问题
- 已知:一个整数n;
- 未知:计算出1-n中所有数的和;
- 关系:计数求和。
2.定义变量
- n - 存储用户输入的上限;
- sum - 累加器,初始化为0,用来累计从1到n的整数之和。
int n,sum=0;
3.输入数据
- 输入整数n。
cin>>n;
4.数据计算
- 开始一个循环,从1遍历到n(包括n)。
- 在每次循环中,将当前的i累加到sum中。
for(int i=1;i<=n;i++){
sum+=i;
}
5.输出
- 输出结果sum。
cout << sum << endl;
完整代码如下:
#include<bits/stdc++.h> // 包含了C++标准库中的所有头文件,方便快捷但不推荐用于实际项目中。
using namespace std; // 使用std命名空间,避免每次使用标准库元素时都得加上std::前缀。
int main(){ // 定义主函数,程序从这里开始执行。
//一、分析问题
//已知:整数n。
//未知:前n项和。
//关系:累加。
//二、数据定义
int n, sum = 0; // 定义两个整型变量:
// n - 存储用户输入的上限;
// sum - 累加器,初始化为0,用来累计从1到n的整数之和。
//三、数据输入
cin >> n; // 从标准输入读取一个整数n,表示累加的上限。
//四、数据计算
for(int i = 1; i <= n; ++i){ // 开始一个循环,从1遍历到n(包括n)。
sum += i; // 在每次循环中,将当前的i累加到sum中。
}
//五、输出结果
cout << sum << endl; // 输出累加的结果,并换行。
return 0; // 主函数结束,返回0给操作系统,表示程序正常结束。
}
欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》
问题:1004. 编程求1 * 2 * 3*…*n
类型:简单循环
题目描述:
编程求 1×2×3×⋯×n 。
输入:
输入一行,只有一个整数 n(1≤n≤10);
输出:
输出只有一行(这意味着末尾有一个回车符号),包括 1 个整数。
样例:
输入:
5
输出:
120
1.分析问题
- 已知:一个整数n;
- 未知:编程求 n的阶乘。
- 关系:n 的阶乘定义为从 1 到 n 所有整数的乘积,表示为 n! = 1 * 2 * … * n。
2.定义变量
定义两个整型变量:
- n - 存储用户输入的整数;
- r - 累乘器,初始化为1,用来累计从1到n的整数乘积。
int n,r=1;
3.输入数据
- 读取一个整数n,表示要计算阶乘的数。
cin>>n;
4.数据计算
- 开始一个循环,从1遍历到n(包括n)。
- 在每次循环中,将当前的i与累乘器r相乘,并更新r。
for(int i=1;i<=n;++i){
r*=i;
}
5.输出
- 输出累乘的结果,即n的阶乘。
cout<<r;
完整代码如下:
#include<bits/stdc++.h> // 包含了C++标准库中的所有头文件,方便快捷但不推荐用于实际项目中。
using namespace std; // 使用std命名空间,避免每次使用标准库元素时都得加上std::前缀。
int main(){ // 定义主函数,程序从这里开始执行。
//一、分析问题
//已知:一个整数n
//未知:编程求 n的阶乘。
//关系:n 的阶乘定义为从 1 到 n 所有整数的乘积,表示为 n! = 1 * 2 * ... * n。
//二、数据定义
int n, r = 1; // 定义两个整型变量:
// n - 存储用户输入的整数;
// r - 累乘器,初始化为1,用来累计从1到n的整数乘积。
//三、数据输入
cin >> n; // 从标准输入读取一个整数n,表示要计算阶乘的数。
//四、数据计算
for(int i = 1; i <= n; ++i){ // 开始一个循环,从1遍历到n(包括n)。
r *= i; // 在每次循环中,将当前的i与累乘器r相乘,并更新r。
}
//五、输出结果
cout << r; // 输出累乘的结果,即n的阶乘。
return 0; // 主函数结束,返回0给操作系统,表示程序正常结束。
}
欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》
问题:1014. 编程求1+1/2+1/3+…+1/n
类型:简单循环
题目描述:
编程求 1+1/2+1/3+⋯+1/n 。
输入:
输入一行,只有一个整数 n(1≤n≤200) 。
输出:
输出只有一行(这意味着末尾有一个回车符号),包括 1 个实数。(保留 3 位小数) 。
样例:
输入:
5
输出:
2.283
1.分析问题
- 已知:一个整数n;
- 未知:编程求1+1/2+1/3+…+1/n;
- 关系:调和级数求和,即求从1到n分之一的所有项之和。
2.定义变量
- 定义一个整型变量n,用来存储用户输入的上限。
- 定义一个双精度浮点型变量r,初始化为0,用来累计调和级数的和。
int n;
double r=0;
3.输入数据
- 读取一个整数n,表示求和的上限。
cin>>n;
4.数据计算
- 开始一个循环,从1遍历到n(包括n)。
- 在每次循环中,将当前项1/i累加到r中。
- 注意使用1.0以确保除法是浮点数除法,而不是整数除法。
for(int i=1;i<=n;++i){
r+=1.0/i;
}
5.输出
- 输出累加的结果,设置输出格式为固定小数点形式,并保留三位小数。
cout<<fixed<<setprecision(3)<<r;
完整代码如下:
#include<bits/stdc++.h> // 包含了C++标准库中的所有头文件,方便快捷但不推荐用于实际项目中。
using namespace std; // 使用std命名空间,避免每次使用标准库元素时都得加上std::前缀。
int main(){ // 定义主函数,程序从这里开始执行。
//一、分析问题
//已知:一个整数n;
//未知:编程求1+1/2+1/3+...+1/n
//关系:调和级数求和,即求从1到n分之一的所有项之和。
//二、数据定义
int n; // 定义一个整型变量n,用来存储用户输入的上限。
double r = 0; // 定义一个双精度浮点型变量r,初始化为0,用来累计调和级数的和。
//三、数据输入
cin >> n; // 从标准输入读取一个整数n,表示求和的上限。
//四、数据计算
for(int i = 1; i <= n; ++i){ // 开始一个循环,从1遍历到n(包括n)。
r += 1.0 / i; // 在每次循环中,将当前项1/i累加到r中。
// 注意使用1.0以确保除法是浮点数除法,而不是整数除法。
}
//五、输出结果
cout << fixed << setprecision(3) << r; // 输出累加的结果,设置输出格式为固定小数点形式,并保留三位小数。
return 0; // 主函数结束,返回0给操作系统,表示程序正常结束。
}
欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》
问题:1056. 所有不超过1000的数中含有数字3的自然数
类型:简单循环
题目描述:
编程求出所有不超过 1000 的数中,含有数字 3 的自然数,并统计总数。
输入:
无。
输出:
输出只有一行(这意味着末尾有一个回车符号),包括 1 个整数。
样例:
输入:
输出:
1.分析问题
- 已知:无输入,直接处理范围内的数。
- 未知:求出所有不超过 1000 的数中,含有数字 3 的自然数,并统计总数。
- 关系:通过拆分每一位数字来检查是否包含数字3。
2.定义变量
- 定义一个整型变量c,初始化为0,用来累计包含数字3的数的数量。
int c=0;
3.输入数据
无。
4.数据计算
- 开始一个循环,从1遍历到999(包括999)。
- 检查当前数i的每一位是否包含数字3。
- 如果包含,则将计数器c加1。
for(int i=3;i<1000;++i){
if(i%10==3||i/10%10==3||i/100==3) ++c;
}
5.输出
- 输出包含数字3的数的总数。
cout<<c;
完整代码如下:
#include<bits/stdc++.h> // 包含了C++标准库中的所有头文件,方便快捷但不推荐用于实际项目中。
using namespace std; // 使用std命名空间,避免每次使用标准库元素时都得加上std::前缀。
int main(){ // 定义主函数,程序从这里开始执行。
//一、分析问题
//已知:无输入,直接处理范围内的数。
//未知:求出所有不超过 1000 的数中,含有数字 3 的自然数,并统计总数。
//关系:通过拆分每一位数字来检查是否包含数字3。
//二、数据定义
int c = 0; // 定义一个整型变量c,初始化为0,用来累计包含数字3的数的数量。
//三、数据输入
// 无需用户输入,直接在代码中处理1到999的所有数。
//四、数据计算
for(int i = 1; i < 1000; ++i){ // 开始一个循环,从1遍历到999(包括999)。
if(i % 10 == 3 || i / 10 % 10 == 3 || i / 100 == 3) { // 检查当前数i的每一位是否包含数字3。
++c; // 如果包含,则将计数器c加1。
}
}
//五、输出结果
cout << c; // 输出包含数字3的数的总数。
return 0; // 主函数结束,返回0给操作系统,表示程序正常结束。
}
欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》
问题:1055. 求满足条件的整数个数
类型:简单循环
题目描述:
在 1∼n 中,找出能同时满足用 3 除余 2 ,用 5 除余 3 ,用 7 除余 2 的所有整数的个数,如果没有请输出 0 。
输入:
输入一行,只有一个整数 n(1≤n≤2000) 。
输出:
输出只有一行(这意味着末尾有一个回车符号),包括 1 个整数。
样例:
输入:
100
输出:
1
1.分析问题
- 已知:一个整数n;
- 未知:找出能同时满足用 3 除余 2 ,用 5 除余 3 ,用 7 除余 2 的所有整数的个数,如果没有请输出 0 。
- 关系:逻辑运算&&。
2.定义变量
- 定义两个整型变量:n 和 计数器c。
int n,c=0;
3.输入数据
- 读取一个整数n,表示范围的上限。
cin>>n;
4.数据计算
- 开始一个循环,从1遍历到n(包括n)。
- 检查当前数i是否满足所有条件。
- 如果满足条件,则将计数器c加1。
for(int i=1;i<=n;++i){
if(i%3==2&&i%5==3&&i%7==2) ++c;
}
5.输出
- 输出个数。
cout<<c;
完整代码如下:
#include<bits/stdc++.h> // 包含了C++标准库中的所有头文件,方便快捷但不推荐用于实际项目中。
using namespace std; // 使用std命名空间,避免每次使用标准库元素时都得加上std::前缀。
int main(){ // 定义主函数,程序从这里开始执行。
//一、分析问题
//已知:一个整数n;
//未知:找出能同时满足用 3 除余 2 ,用 5 除余 3 ,用 7 除余 2 的所有整数的个数,如果没有请输出 0 。
//关系:逻辑运算符
//二、数据定义
int n, c = 0; // 定义两个整型变量:
// n - 存储用户输入的上限;
// c - 计数器,初始化为0,用来累计满足条件的整数数量。
//三、数据输入
cin >> n; // 从标准输入读取一个整数n,表示范围的上限。
//四、数据计算
for(int i = 1; i <= n; ++i){ // 开始一个循环,从1遍历到n(包括n)。
if(i % 3 == 2 && i % 5 == 3 && i % 7 == 2) { // 检查当前数i是否满足所有条件。
++c; // 如果满足条件,则将计数器c加1。
}
}
//五、输出结果
cout << c; // 输出满足条件的整数的数量。
return 0; // 主函数结束,返回0给操作系统,表示程序正常结束。
}
欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》
问题:1393. 与7无关的数?
类型:简单循环
题目描述:
一个整数,如果这个数能够被 7 整除,或者其中有一位是7,我们称为这个数是与 7 有关的数。比如: 14 能被 7 整除,17 有一位为 7 ,这两个数都是与 7有关的数。
请你编程求出 1∼n(n≤999) 中,与 7 无关的数的总和是多少?
比如 1∼10 中与 7 无关的数的和为:1+2+3+4+5+6+8+9+10=48 。
输入:
一个整数 n(n≤999) 。
输出:
1∼n 中与 7 无关的数的总和。
样例:
输入:
10
输出:
48
1.分析问题
- 已知:一个整数n;
- 未知:1-n中,与 7 无关的数的总和是多少?
2.定义变量
- n - 存储用户输入的整数;
- r - 累加器,初始化为0,用来累计满足条件的整数之和。
int n,r=0;
3.输入数据
- 输入读取一个整数n,表示范围的上限。
cin>>n;
4.数据计算
- 开始一个循环,从1遍历到n(包括n)。
- 检查当前数i是否满足以下条件:
1. 不能被7整除 (i % 7 != 0)
2. 不包含数字7 - 如果满足条件,则将当前数i累加到r中。
for(int i=1;i<=n;++i){
if(!(i%7==0 || i%10==7 || i/10%10==7 || i/100==7)){
r+=i;
}
}
5.输出
- 输出结果r。
cout<<r;
完整代码如下:
#include<bits/stdc++.h> // 包含了C++标准库中的所有头文件,方便快捷但不推荐用于实际项目中。
using namespace std; // 使用std命名空间,避免每次使用标准库元素时都得加上std::前缀。
int main(){ // 定义主函数,程序从这里开始执行。
//一、分析问题
//已知:一个整数n;
//未知:与 7 无关的数的总和是多少?
//关系:不能被7整除且不包含数字7的数。
//二、数据定义
int n, r = 0; // 定义两个整型变量:
// n - 存储用户输入的上限;
// r - 累加器,初始化为0,用来累计满足条件的整数之和。
//三、数据输入
cin >> n; // 从标准输入读取一个整数n,表示范围的上限。
//四、数据计算
for(int i = 1; i <= n; ++i){ // 开始一个循环,从1遍历到n(包括n)。
// 检查当前数i是否满足以下条件:
// 1. 不能被7整除 (i % 7 != 0)
// 2. 不包含数字7 (i % 10 != 7 && i / 10 % 10 != 7 && i / 100 != 7)
if(!(i % 7 == 0 || i % 10 == 7 || i / 10 % 10 == 7 || i / 100 == 7)) {
r += i; // 如果满足条件,则将当前数i累加到r中。
}
}
//五、输出结果
cout << r; // 输出满足条件的整数之和。
return 0; // 主函数结束,返回0给操作系统,表示程序正常结束。
}
三、感谢
如若本文对您的学习或工作有所启发和帮助,恳请您给予宝贵的支持——轻轻一点,为文章点赞;若觉得内容值得分享给更多朋友,欢迎转发扩散;若认为此篇内容具有长期参考价值,敬请收藏以便随时查阅。
每一次您的点赞、分享与收藏,都是对我持续创作和分享的热情鼓励,也是推动我不断提供更多高质量内容的动力源泉。期待我们在下一篇文章中再次相遇,共同攀登知识的高峰!
欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》