1. 程式人生 > >Problem 12. 不要62

Problem 12. 不要62

Problem 12. 不要62

題目簡述:

    對於每次給出的一個牌照區間號,推斷出要實際上給多少輛新的士車上牌照了。車牌號中不包含不吉利數字4和62(連號)。

解題思路:

首先,我是用一個數組b來存放每個車牌號的每個數字用於判斷車牌號是否可用,另一個數組a用來存放車牌號的狀態(1代表可用車牌號,0則代表不可用),最後將陣列a求和即可用的車牌號數。

細節處理:

用陣列b判斷車牌號是否可用時,只要有一位數為不吉利數字即可跳出迴圈,用於減少迴圈次數。如if(b[j]==4){ a[i]=0; break; }

原始碼:

#include<iostream>
using namespace std;
int a[1000010],b[10];
int main()
{
    int i,x,y,j,k,sum;
    for(i=0;i<1000010;i++)
    {
        k=i;
        a[i]=1;
        for(j=0;k!=0;j++)
        {
            b[j]=k%10;
            k/=10;
        }
        while(j--)
        {
            if(b[j]==4)
            {
                a[i]=0;
                break;//遇到4跳出即可,減少迴圈次數
            }
            else if(b[j]==6)
            {
                if(b[j-1]==2)
                {
                    a[i]=0;
                    break;
                }
            }
        }
    }
    while(cin>>x>>y)
    {
        sum=0;
        if(!x&&!y)
        break;
        else
        {
            for(i=x;i<=y;i++)
            sum+=a[i];
        }
        cout<<sum<<endl;
    }	
}