ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1313:【例3.5】位数问题

2022-05-15 13:00:07  阅读:181  来源: 互联网

标签:10 1313 数字 long 偶数 3.5 位数 1000


1313:【例3.5】位数问题


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 19897     通过数: 10897 

【题目描述】

在所有的N位数中,有多少个数中有偶数个数字3?,由于结果可能很大,你只需要输出这个答案对12345取余的值。

【输入】

读入一个数N(N≤1000)。

【输出】

输出有多少个数中有偶数个数字3。

【输入样例】

2

【输出样例】

73

编写程序:

#include<iostream>
#include<cmath>
using namespace std;
int main(){
  long long n,sum,b=0,c;
  cin>>n;
  if(n==1) b=9;
    else if(n>1){
      for(long long i=1*pow(10,n-1);i<1*pow(10,n);++i){
        c=i;
        sum=0;
        for(long long j=1;j<=n;++j){
          if(c%10==3) sum+=1;
          c/=10;
        }
            if(sum%2==0) b+=1;
        }
     }
  cout<<b%12345;
  return 0;
}

解题思路:以上程序对N位数的每一个数字进行统计,然后,判断N位数中有几个含偶数个3的数。这样做,由于N最大可以是1000,当一个数达到1000位非常非常大,循环查找的方法已经不可行了。数据太大即使是long long型数据也已经越界了。在DEV-C++中检验的时候,N=10左右,运行时间就很长了。

正确程序:

#include<iostream>
using namespace std;
int main(){
	long long n,a[1010]={0},b[1010]={0},c=9;
	cin>>n;
	a[1]=9;
	b[1]=1;
	for(int i=2;i<=n;++i){
		if(i==n) c=8;
		a[i]=(c*a[i-1]+b[i-1])%12345;
		b[i]=(a[i-1]+c*b[i-1])%12345;
    }
    cout<<a[n];
	return 0;
}

 

 

 解题思路:

(1)当N=1,1位数时,有(0,1,2,4,5,6,7,8,9)9个含偶数个3的数(含0个3,0也是偶数);只有(3)1个含奇数个3的数。

(2)当N=2,那么十位可以取的数字是(1,2,3,4,5,6,7,8,9)一个数的最高位不能取0.这样,十位可以取的数字中含偶数个3的数字有8个(1,2,4,5,6,7,8,9),含奇数个3的数字只有1个(3).所以,十位与个位组合:

 

 (3)当N=3至n时,组合如下图:

 

 (4)根据以上分析,由于数据特别巨大,因此,经过12345取余后,可以计算、编写程序。

 

标签:10,1313,数字,long,偶数,3.5,位数,1000
来源: https://www.cnblogs.com/xy2022/p/16272920.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有