牛客網 找數字個數
阿新 • • 發佈:2019-01-26
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;
}