题目:http://hustoj.sinaapp.com/problem.php?id=1828
* * * x * * ------- * * * * * * ------- * * * *
用给定的数字来取代*,求式子成立的个数
思路:枚举法,我的做法是将111*11到999*99全部枚举,也可将输入的数字排列枚举。
#include <stdio.h> #include <stdlib.h> int arr[10]; int ans=0; int n; int inarr(int x) { int num; if(x/100==0) num=2; else if(x/1000==0) num=3; else if(x/10000==0) num=4; for(int i=0;i<num;i++) { int flag=0; for(int j=0;j<n;j++) { if(x%10==arr[j]) { flag=1; break; } } x/=10; if(flag==0) return 0; } return 1; } int main() { scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&arr[i]); } for(int a=111;a<999;a++) { for(int b=11;b<99;b++) { if(!inarr(a)||!inarr(b)||a*b>9999||a*(b/10)>999||a*(b%10)>999) continue; else { if(inarr(a*b)&&inarr(a*(b/10))&&inarr(a*(b%10))) { ans++; } } } } printf("%d\n",ans); }