洛谷 P1179 [NOIP2010 普及组] 数字统计 题解
题目描述
请统计某个给定范围 [L,R] 的所有整数中,数字 2 出现的次数。
比如给定范围 [2,22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 20 中出现 1 次,在数 21 中出现 1 次,在数 22 中出现 2 次,所以数字 2 在该范围内一共出现了 6 次。
输入格式
2 个正整数 L 和 R,之间用一个空格隔开。
输出格式
数字 2 出现的次数。
输入输出样例
输入 #1
2 22
输出 #1
6
输入 #2
2 100
输出 #2
20
说明/提示
1≤L≤R≤100000。
NOIP2010 普及组 第一题
思路:
思路1:
从L遍历到R,每个i都算一下有多少个2
优点:不用写额外的函数
缺点:每次算有多少个2时,原来的循环变量不能改变
思路2:
写一个函数用于计算每个数有多少个2(函数里变量的值不改变),循环里面套函数
优点:不用管循环变量是否改变
缺点:代码量较长
当然,这两种我都给大家写一遍!
AC代码(思路1):
//思路1
#include<bits/stdc++.h>//万能头文件
using namespace std;//cin,cout必备
int main()//main主函数
{int l,r;//定义变量cin >> l >> r;//输入int cnt=0;//定义计数器,表示2的数量for(int i=l;i<=r;i++)//l到r{int j=i;//循环变量不能改变while(j)//一直÷10,直到结果为0{cnt+=j%10==2;//如果余数是2,cnt++j/=10;//别忘了这个}}cout<<cnt;//输出计数器的值return 0;//程序结束
}
AC代码(思路2):
//思路2
#include<bits/stdc++.h>//万能头文件
using namespace std;//cin,cout必备
int NumberofTwos(int n)//定义函数求2的个数
{int cnt=0;//初始化计数器do//这是一个do while循环,和while(xxx)是一样的{cnt+=n%10==2;//余数是2,cnt++n/=10;}while(n);//别忘了这个return cnt;//返回计数器的值
}
int main()//main主函数
{int l,r;//定义变量cin >> l >> r;//输入int cnt=0;for(int i=l;i<=r;i++){cnt+=NumberofTwos(i);}cout<<cnt;return 0;//程序结束
}
最后还是奉上提交记录:
思路1:思路1(无函数)
思路2:思路2(有函数)
这篇博客就到这里啦,我们几分钟后再见!