NYOJ975 - 关于521
【摘要】
描述
Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去。
浏览网页的流年忽然看到了网上有人用玫瑰花瓣拼成了521三个数字,顿时觉得好浪漫,因为每个男生都会不经意的成为浪漫的制造者。此后,流年走到哪里都能看到5、2、1三个数字,他怒了,现在他想知道在连续的数中有多少数全部包含了这三个数字。例如123...
Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去。
浏览网页的流年忽然看到了网上有人用玫瑰花瓣拼成了521三个数字,顿时觉得好浪漫,因为每个男生都会不经意的成为浪漫的制造者。此后,流年走到哪里都能看到5、2、1三个数字,他怒了,现在他想知道在连续的数中有多少数全部包含了这三个数字。例如12356就算一个,而5111就不算。特别的,如果他看到了521三个数连续出现,会特别的愤怒。例如35210。
-
输入
-
多组测试数据:
一行给定两个数a,b(0<a,b<1000000),表示数字的开始和结束。 输出
- 一行显示他想要知道的数有几个及显示有多少个数字令他特别的愤怒。用空格隔开。 样例输入
-
200 500 300 900 1 600
样例输出
-
Case 1:2 0 Case 2:2 1 Case 3:6 1
-
#include<stdio.h>
-
#include<string.h>
-
#define MAXN 1000000
-
int anger[MAXN], anger2[MAXN];
-
int s[10];
-
//枚举1000000以内所有的整数,最后查表
-
void find(){
-
int x, y, z, j, i, n, m;
-
for( j = 125; j < MAXN; j ++ ){
-
m = 0;
-
x = y = z = 1;
-
s[0] = j % 10;
-
s[1] = j / 10 % 10;
-
s[2] = j / 100 % 10;
-
s[3] = j / 1000 % 10;
-
s[4] = j / 10000 % 10;
-
s[5] = j / 100000 % 10;
-
for( i =0; i < 4; i ++ ){
-
if( s[i] ==1&&s[i+1] ==2&&s[i+2] == 5 ){
-
anger2[j] = anger2[j-1]+1;
-
break;
-
}
-
if( i == 3 ) //不符合条件
-
anger2[j] = anger2[j-1];
-
}
-
for( i = 0; i < 6; i ++ ){
-
if( x&&s[i]==1 )
-
++m, x = 0;
-
if( y&&s[i] ==2 )
-
++m, y = 0;
-
if( z&&s[i] == 5 )
-
++m, z = 0;
-
}
-
if( m == 3 )
-
anger[j] =anger[j-1]+1;
-
else
-
anger[j] = anger[j-1];
-
}
-
}
-
int main(){
-
find();
-
int a, b, kase = 1;
-
while( scanf( "%d%d", &a, &b ) == 2 )
-
printf( "Case %d:%d %d\n", kase++,anger[b]-anger[a-1], anger2[b]-anger2[a-1] );//用a,b框定范围,find()中存在两个范围中的数值是从125(第一个)开始知道这个一共有几个这样的数字。
-
return 0;
-
}
-
文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。
原文链接:gwj1314.blog.csdn.net/article/details/54744283
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)