找数字——算法笔记

题目描述:

在小于等于1000的自然数里面寻找满足条件的数的个数:如果某个数里包含了a和b两个数里包含的数,则这个数就不能要。例如:a=14,b=23,如果数字中包含1、2、3、4这四个数中的任意一个数,那么这个数就不能要。现在告诉a,b,请找出1000以内有多少个满足条件的数。

输入:

第一行给出一个数字 t,表示有 t 组数据
接下来的t行,每行两个数字,a和b

输出:

输出满足条件的数的个数

输入样例:

1
1234 5678

输出样例:

8

直接上代码, 里面有解释

#include<iostream>
#include<string>
using namespace std;

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        string a, b, str;
        string::size_type position;
        cin >> a >> b;
        str = a + b;    //将输入的字符串拼接
        int count = 0;

        for (int i = 0; i <= 1000; i++)
        {
            int temp, temp1;
            int flag = 1;   //决定是否要加一
            temp1 = i;
            //分离整数并判断是否在字符串中出现
            do
            {
                temp = temp1 % 10;      //取余

                position = str.find (char (temp + '0'));
                if (position != str.npos)   //如果出现了
                {
                    flag = 0;
                    break;          //直接跳出循环
                }
                else
                    temp1 = temp1 / 10;//取整(是temp1 / 10, mmp害我找了半天的bug)
            }
            while (temp1);

            if (flag == 1)
                count++;
        }
        cout << count << endl;
    }
}

你可能感兴趣的:(算法笔记)