1. 程式人生 > >牛客網 找數字個數

牛客網 找數字個數

lulu喜歡小於等於1000的正整數,但是如果某個數是a或b的倍數,lulu會討厭這個數。如果某個數裡包含了a和b兩個數裡包含的數,lulu也會討厭。(例如a=14,b=23,如果數字中包含1、2、3、4這四個數中的任意一個數,lulu就會討厭這個數)。現在告訴你a,b,你能說出lulu喜歡的數有多少個麼。

輸入描述:

第一行是樣例數T
第2到2+T-1行每行有2個整數a b。

輸出描述:

輸出lulu喜歡的數的個數
示例1

輸入

3
2 3
14 23
1234 5678

輸出

171
190
7

說明

a=1234 b=5678的時候,只考慮含有數字9,0的數,只有7個,分別是9,99,999,90,990,909,900

寫的時候有思路但是沒有實現出來  後來看別人的程式碼看到了與自己一樣的思路  在這裡做下記錄

#include "stdio.h"
#include "algorithm"
#include "iostream"
#include "queue"
#include "cstring"
#include "sstream"
#include "stack"
#include "cmath"
#include "stdlib.h"
#include "string.h"
#include "map"
#define inf 0x3f3f3f3f
using namespace std;
int a, b;
bool vis[10];//代表十個數字 使用了哪些
int main()
{
    int T;
    scanf("%d", &T);
    while(T--) {
        scanf("%d%d", &a, &b);//a b效果相同
        memset(vis, 0, sizeof(vis));
        int t = a;
        while(t)
        {
            vis[t % 10] = 1;//從右往左一次取出來每個數字 並把它標為1代表已經使用
            t /= 10;
        }
        t = b;
        while(t)
        {
            vis[t % 10] = 1;//同上   自己寫的時候就寫到了這裡  下邊判斷包含不包含不會判斷
            t /= 10;
        }
        int cnt = 0;//cnt是最終結果
        for(int i = 1; i <= 1000; ++i)
        {
            if(i % a == 0 || i % b == 0)
                continue;//ab的倍數都跳過
            int t = i;
            bool flag = 1;//是否包含不喜歡的數字 包含為0 不包含為1
            while(t)//想把這一段程式碼黃色高亮但是好像不行 也不知道咋改回去了  就這樣吧
            {
                if(vis[t % 10])//與上邊的操作一樣 從右往左取數 如果使用了這個數字 flag=0
                {
                    flag = 0;
                    break;
                }
                t /= 10;
            }
            cnt += flag;//如果不包含 最終結果就++
} printf("%d\n", cnt); } return 0; }