作业帮 > 综合 > 作业

问一道简单的C语言题目

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/18 14:09:53
问一道简单的C语言题目
输入正整数n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2
问一道简单的C语言题目
可用递归方式实现,代码如下:#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间数}运行结果如图: