首页 > 代码库 > 521
521
关于521
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去。
浏览网页的流年忽然看到了网上有人用玫瑰花瓣拼成了521三个数字,顿时觉得好浪漫,因为每个男生都会不经意的成为浪漫的制造者。此后,流年走到哪里都能看到5、2、1三个数字,他怒了,现在他想知道在连续的数中有多少数全部包含了这三个数字。例如12356就算一个,而5111就不算。特别的,如果他看到了521三个数连续出现,会特别的愤怒。例如35210。
- 输入
- 多组测试数据:
一行给定两个数a,b(0<a,b<1000000),表示数字的开始和结束。 - 输出
- 一行显示他想要知道的数有几个及显示有多少个数字令他特别的愤怒。用空格隔开。
- 样例输入
200 500300 9001 600
- 样例输出
Case 1:2 0Case 2:2 1Case 3:6 1
有重复计算类型的题目要注意优化,不然会超时的哦~1 #include<stdio.h> 2 int s1[1000000],s2[1000000]; 3 void fun(int a, int b) 4 { 5 int i,ii; 6 bool t1,t2,t3,t4; 7 s1[0] = s2[0] = s1[1] = s2[1] = 0; 8 for(i=a; i <= b; i++){ 9 ii = i;10 t1 = t2 = t3 = t4 =false;11 while(ii != 0 ){12 int a = ii %10;13 if( a == 5)14 {15 t1 = true;16 }17 else if( a == 2)18 {19 t2 = true;20 }21 else if( a == 1)22 {23 t3 = true;24 }25 ii = ii / 10;26 }27 if(t1 && t2 && t3){28 s1[i-1] = s1[i-2] + 1;29 ii = i;30 while(ii != 0 ){31 int a = ii % 10;32 int b = (ii / 10) % 10;33 int c = (ii / 100) % 10;34 if( c > 0 && a == 1 && b == 2 && c ==5)35 t4 = true;36 ii = ii / 10;37 }38 if(t4)39 s2[i-1] = s2[i-2] + 1;40 else 41 s2[i-1] = s2[i-2];42 }43 else{44 s2[i-1] = s2[i-2];45 s1[i-1] = s1[i-2];46 }47 }48 }49 50 int main()51 {52 int a,b,i=1;53 fun(2,1000000);54 while(scanf("%d%d",&a,&b) != EOF){55 if(a == 1)56 printf("Case %d:%d %d\n",i,s1[b-1]-s1[a-1],s2[b-1]-s2[a-1]);57 else58 printf("Case %d:%d %d\n",i,s1[b-1]-s1[a-2],s2[b-1]-s2[a-2]);59 i++;60 }61 return 0;62 }
learning....
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。