1、搜索题,注意剪枝,尤其是对位数的判定,这个是剪枝的关键。
2、if(upnum+leftnum+downnum>9) break;这句话要写两次,想想为什么。
#include #include using namespace std; int flag[10],flag1[10]; int check(int n,int &cnt){ while(n){ flag[n%10]++; n/=10; cnt++; } if(flag[0]>0) return 1; for(int i=1;i<=9;i++) if(flag[i]>1) return 1; return 0; } bool Allright(){ for(int i=1;i<10;i++) if(!flag[i]) return false; return true; } int main(){ int num,ans=0,count=0; scanf("%d",&num); for(int left=1;left9) break; continue; } if(upnum+downnum+leftnum>9) break; if(Allright()) count++; } } printf("%d\n",count); return 0; }