标签:set eve event algo 次数 img bsp clu 合并
#include <iostream> #include <cstdio> #include <cstring> //for memset #include <algorithm> //for max using namespace std; int cntone(int n,int x) { int cnt=0,i=0,tmp; for(i=0;i<=n;i++)//1~n { tmp=i; while(tmp) { if(tmp%10==x) cnt++; tmp/=10; } } return cnt; } int main() { int n,x; while(cin>>n>>x) { cout<<cntone(n,x)<<endl; } }
找规律:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; /*只求1的个数*/ int cntone(int n) { int cnt=0; for(int i=1;i<=n;i*=10)//1~n { int a=n/i,b=n%i; cnt+=(a+8)/10*i+((a%10)==1?b+1:0); //之所以补8,是因为当百位为0,则a/10==(a+8)/10,当百位>=2,补8会产生进位位,效果等同于(a/10+1) } return cnt; } int main() { int n; while(cin>>n) { cout<<cntone(n)<<endl; } }
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; // 计算数字 X (不包括0)在 1-n 中出现的次数。 // X = 0 时,规律与上面给出的规律不同,需要另行考虑。 int cntone(int n,int x) { int cnt=0,tmp; for(int i=1; tmp=n/i; i*=10)//1~n { cnt += (tmp/10)*i; int cur = tmp%10; if(cur>x) { cnt+=i; } else if(cur == x) { cnt+=n-tmp*i+1; } } return cnt; } // X = 0 时 int cntzero(int n) { int cnt=0,k; for(int i=1; (k=n/i)/10; i*=10) { cnt+= (k/10)*i; if(k%10==0) { cnt+=n-k*i+1-i; } } return cnt; } //合并:计算数字 X 在 1-n 中出现的次数,对 X 从 0 到 9 都有效: int cnts(int n,int x) { int cnt=0,k; for(int i=1; k=n/i; i*=10) { int high=k/10; if(x==0) { if(high) high--; else break; } cnt+=high*i; int cur=k%10; if(cur>x) cnt+=i; else if(cur==x) cnt+=n-k*i+1; } return cnt; } int main() { int n,x; while(cin>>n>>x) { cout<<cntone(n,x)<<" "<<cntzero(n)<<" "<<cnts(n,x)<<endl; } }
标签:set eve event algo 次数 img bsp clu 合并
原文地址:http://www.cnblogs.com/Roni-i/p/7904225.html