Question:
Solve:
代码量倒是一堆,暴力就行,只需要注意数位相同直接退出和什么情况能够合成四位数就行,不需要解释什么~
Code:
#include<bits/stdc++.h>
using namespace std;
int cnt[10], a[10];
//计数
bool Cnt(int x){
while(x){
cnt[x%10]++;
if(cnt[x%10] > 1) return false;
x /= 10;
}
return true;
}
//检测是否相等
bool check(int x){
memset(a,0,sizeof(a));
while(x){
a[x%10]++;
if(a[x%10] > 1) return false;
if(cnt[x%10] != 1) return false;
x /= 10;
}
return true;
}
int main(void)
{
int res = 0;
//两位数X两位数
for(int i = 10; i <= 99; i++){
for(int j = i+1; j <= 99; j++){
if(i*j/1000 == 0) continue;
if(!Cnt(i) || !Cnt(j)){
memset(cnt,0,sizeof(cnt));
continue;
}
if(check(i*j)) res++;
memset(cnt,0,sizeof(cnt));
}
}
//三位数X一位数
for(int i = 100; i <= 999; i++){
for(int j = 1; j <= 9; j++){
if(i*j/1000 == 0) continue;
if(!Cnt(i) || !Cnt(j)) {
memset(cnt,0,sizeof(cnt));
continue;
}
if(check(i*j)) res++;
memset(cnt,0,sizeof(cnt));
}
}
cout <<res <<endl;
return 0;
}
最后附上蓝桥杯汇总链接:蓝桥杯C/C++A组省赛历年真题题解
声明:图片均来源于蓝桥杯官网,以个人刷题整理为目的,如若侵权,请联系删除~