51nod--1770数数字

题目描述:


Input
多组测试数据。
第一行有一个整数T,表示测试数据的数目。(1≤T≤5000)
接下来有T行,每一行表示一组测试数据,有4个整数a,b,d,n。 (1≤a,b≤9,0≤d≤9,1≤n≤10^9)
Output
对于每一组数据,输出一个整数占一行,表示答案。
Input示例
2
3 3 9 10
3 3 0 10
Output示例
10
0


想法:

    这道题就是纯粹的找规律,规律也不难找,注意后三个数字,以及第一个数字,以及 n==1 的时候答案只有几个数字(可能为1个,可能为2个),等等,在此我是用了分类的方法,觉得其实挺繁琐的,但是应该比较好理解,而且要注意挺多细节,自己也得多学会点测试的相关技巧。


完整代码:

#include <iostream>

using namespace std;

int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        int a,b,d,n;
        cin >> a >> b >> d >> n;
        int jie = a*b;
        if(n > 1)
        {
            if((jie/10) + (jie%10) <10)
            {
                if(jie < 10)
                {
                    if(d == jie)
                        cout << n << endl;
                    else cout << "0" << endl;
                }
                else
                {
                    int yi = jie % 10;
                    int duo = (jie / 10) + (jie % 10);
                    int er = jie / 10;
                    if(d == yi && yi != er) cout << "1" << endl;
                    else if(d == yi && yi == er) cout << "2" << endl;
                    else if(d == duo)
                    {
                        if(duo == er) cout << n << endl;
                        else cout << n-1 << endl;
                    }
                    else if (d == er)
                    {
                        cout << "1" << endl;
                    }
                    else cout << "0" << endl;
                }
            }
            else
            {
                int shu = a*100+a*10+a;
                int jieguo = shu*b;
                int yii = jieguo%10;
                int err = (jieguo/10)%10;
                int duo = (jieguo/100)%10;
                int high = jieguo/1000;
                if(d == yii && yii != high && yii != duo) cout << "1" << endl;
                else if(d== yii && yii == duo && yii != high) cout << n-1 << endl;
                else if(d == yii && yii != duo && yii == high) cout << "2" << endl;

                else if(d == err && err != duo && err != high) cout << "1" << endl;
                else if(d == err && err == duo && err != high) cout << n-1 << endl;
                else if(d == err && err != duo && err ==high) cout << "2" << endl;

                else if(d == duo && duo != high) cout << n-2 << endl;
                else if(d == duo && duo == high) cout << n-1 << endl;
                else if(d == high) cout << "1" << endl;
                else cout << "0" << endl;
            }
        }
        else
        {
            if(jie >= 10)
            {
                int diyi = jie%10;
                int dier = jie/10;
                if(d == diyi || d == dier) cout << "1" << endl;
                else cout << "0" << endl;
            }
            else
            {
                if(d == jie) cout << "1" << endl;
                else cout << "0" << endl;
            }

        }

    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值