首页 > 代码库 > 数论 - 组合数学 --- 1的个数
数论 - 组合数学 --- 1的个数
1的个数
Mean:
输入一个n,计算小于10^n的正整数中含有1的数的个数。
analyse:
这题是一道组合数学课后思考题。
基本思路: 组合数学乘法原则 + 容斥原理
n位数中,每位可选:{0,1,2,3,4,5,6,7,8,9},所以共有10^n种,其中要除掉每位都为0的情况,所以要减一。
其中每位上不选1的情况为:{0,2,3,4,5,6,7,8,9},所以共有9^n中,同样要除掉全部为0的情况。
Time complexity:O(n)
Source code:
//Memory Time// 1347K 0MS// by : Snarl_jsb#include<algorithm>#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<vector>#include<queue>#include<stack>#include<map>#include<string>#include<climits>#include<cmath>#define N 1000010#define LL long longusing namespace std;//输入一个n,求小于10^n的正整数中有多少个1;int main(){// freopen("C:\\Users\\ASUS\\Desktop\\cin.txt","r",stdin);// freopen("C:\\Users\\ASUS\\Desktop\\cout.txt","w",stdout); int n; while(cin>>n) {// if(n==1)// puts("1"); int sol=1; for(int i=1;i<=n;i++) { sol*=10; } sol--; int res=1; for(int i=1;i<=n;i++) { res*=9; } res--; cout<<sol-res<<endl; } return 0;}
数论 - 组合数学 --- 1的个数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。