问一道简单的C语言题目
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/18 14:09:53
问一道简单的C语言题目
输入正整数n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2
输入正整数n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2
可用递归方式实现,代码如下:#include <stdio.h>#define NUM_CHOOSE 100#define DEN_CHOOSE 1000void printResult(const int allow[10],int n){ int num[5]; int den[5]; int numChoose; int denChoose; long numV = 0; long denV = 0; for(int i=0;i<10;i++){ numChoose = (int)(allow[i]/NUM_CHOOSE)%10; if(numChoose) { num[numChoose-1] = i; }else{ denChoose = (int)(allow[i]/DEN_CHOOSE)%10; if(denChoose) den[denChoose-1] = i; } } for(int i=0;i<5;i++){ numV = 10*numV + num[4-i]; } for(int i=0;i<5;i++){ denV = 10*denV + den[4-i]; } if(numV/denV==n){ printf("%05d/%05d\n",numV,denV); }}void getFactor(int n,int k,int allow[10],int level){ for(int i=0;i<10;i++){// 分子 if(allow[i]!=i) continue; for(int j=0;j<10;j++){ // 分母 if(allow[j]!=j || j==i) continue; if(((n*i-j)+k)%10==0){ allow[i] += DEN_CHOOSE*level; allow[j] += NUM_CHOOSE*level; if(level==5){ printResult(allow,n); }else{ getFactor(n,((n*i-j)+k)/10,allow,level+1); } allow[i] -= DEN_CHOOSE*level; allow[j] -= NUM_CHOOSE*level; } } } return;}int main(){ int nb[10] = {0,1,2,3,4,5,6,7,8,9}; getFactor(2,0,nb,1); // 2可以改为2-79间数}运行结果如图: