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

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

  • 相关阅读:
    C# 文件类的操作---删除
    C#实现Zip压缩解压实例
    UVALIVE 2431 Binary Stirling Numbers
    UVA 10570 meeting with aliens
    UVA 306 Cipher
    UVA 10994 Simple Addition
    UVA 696 How Many Knights
    UVA 10205 Stack 'em Up
    UVA 11125 Arrange Some Marbles
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5271560.html
Copyright © 2011-2022 走看看