• NYOJ975


    描述

    Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去。

    浏览网页的流年忽然看到了网上有人用玫瑰花瓣拼成了521三个数字,顿时觉得好浪漫,因为每个男生都会不经意的成为浪漫的制造者。此后,流年走到哪里都能看到521三个数字,他怒了,现在他想知道在连续的数中有多少数全部包含了这三个数字。例如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
    ",  kase++,anger[b]-anger[a-1], anger2[b]-anger2[a-1] );//用a,b框定范围,find()中存在两个范围中的数值是从125(第一个)开始知道这个一共有几个这样的数字。
    	return 0;
    }





  • 相关阅读:
    Java——enum与int的转换——转载
    Java——JScrollPane设置透明——转载
    Java——JFrame与JButton添加背景
    Java——模态对话框
    u-boot_2010.6 nandflash驱动彻底分析
    linux 常用命令整理----权限管理
    linux 常用命令整理----链接文件
    linux 常用命令整理----文件操作
    linux 常用命令整理----目录操作
    linux 进程运行状态
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444964.html
Copyright © 2020-2023  润新知