zoukankan      html  css  js  c++  java
  • hdoj-2089-不要62

    题目:不要62
    代码1:(TLE)

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	int n,m,i,j,t=0;
    	int a,b,sum=0,k=0;
    	while(scanf("%d%d",&n,&m)!=EOF)
    	{
    		if(n==0 && m==0)break;
    		for(i=n;i<=m;i++)
    		{
    			a=i;
    			b=i;
    			
    			sum++;
    			
    			while(a>0)
    			{
    				if(a%100==62)
    				{
    					sum--;
    					k=1;
    					//printf("%d -1
    ",a);
    					break;
    				}
    				a=a/10;
    			}//是不是62
    			
    			while(b>0)
    			{
    				if(b%10==4 && k==0)
    				{
    					//printf("%d -2
    ",b);
    					sum--;
    					break;
    				}
    				b=b/10;
    			}//位数是否含四
    			
    			k=0;
    		}
    		printf("%d
    ",sum);
    	}
    	return 0;
    }
    

    说实在,我认为我的代码T有一点说不过去。但是它T了,discuss里也是哀声四起。hdoj里面虽说有很多好题目,但是其中个别题目质量堪忧,比如2090算菜价,明明要求四舍五入(printf("%.1lf ",(n*m+0.05));),但是提交评测以后居然是WA,删除以后AC。
    这道容易懂的题目有一种更省时间的算法,我没看到它之前没有想到这个方法。这里也贴出来:

    #include<stdio.h>
    int data[1000005];
    int main()
    {
    	int m,n;
    	int i;
    	int t;
    	int sum;
    	for(i=4;i<=1000003;i++)
    	{
    		t=i;
    		while(t)
    		{
    			if(t%10==4||t%100==62)
    				data[i]=1;//符合要求数组存1
    			t/=10;
    		}
    	}
    	while(scanf("%d%d",&m,&n)!=EOF)
    	{
    		sum=0;
    		if(m==0&&n==0)
    			break;
    		for(i=m;i<=n;i++)
    			sum+=data[i];
    		printf("%d
    ",n-m+1-sum);
    	}
    	return 0;
    }
    

    先从很大范围内找出符合要求的所有数,若符合要求数组存1,之后再在输入流里面累加,n-m+1-sum

    先在大范围中找出符合要求的数存入数组,在需要使用的时候调用数组内元素。省时的一种小技巧。

  • 相关阅读:
    Telnet远程测试
    数据库笔记
    gcc 链接不到 函数实现, undefined reference to xxx
    usb2ttl 引脚定义
    ip v4 地址中 局域网地址范围
    vdi 磁盘文件转换为 vmdk文件的命令
    tftp 命令使用
    无法通过vnc连接到局域网内的树莓派
    镜像服务网站
    C语言 scanf 输入浮点数的用法
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5271560.html
Copyright © 2011-2022 走看看