题目描述:
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;
}