问一道简单的C语言题目输入正整数n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/12 11:56:26
问一道简单的C语言题目输入正整数n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2

问一道简单的C语言题目输入正整数n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2
问一道简单的C语言题目
输入正整数n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2

问一道简单的C语言题目输入正整数n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2

可用递归方式实现,代码如下:

#include <stdio.h>

#define NUM_CHOOSE 100

#define DEN_CHOOSE 1000

void 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间数

}

运行结果如图:

问一道简单的C语言题目输入正整数n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2 c语言求解.从键盘输入一个正整数N,再输入N个整数,按从小到大的顺序输出. C语言.输入一个正整数n(1 c语言,输入一个正整数n(1 c语言输入一个正整数n(1 一道C语言改错题,急用输入一个正整数n(0 C语言 素数统计题目描述给定若干个正整数,请判断素数的个数;输入描述输入数据首先包含一个整数N(1 c语言菜鸟求救!题目为输入正整数n,算出0~n内的完全数,亲密数,水仙花,数阶乘和数,自守数孪生素数,黑洞数等请编写程序,输入正整数n,1 C语言输入正整数n,输出1~n,每行一个 已知正整数n和k,求n从右往左数的第k位数字.C语言基础题目 C语言:输入一个正整数n,再输入n个正整数,判断它们是否为素数. 输入正整数n,依次输出1到n的立方,每行5个 C语言 C语言输入一个正整数N和N个整数,将它们中的偶数按从大到小的顺序进行排序后输出.Input多组测试数据,每组输入一个正整数N(1≤N≤100)和N个整数,用空格分隔.Output将这N个数中的偶数按从大 C语言:输入两个正整数 m 和 n(6 c语言编程 输入一个正整数n(1 用C语言编写程序,输入一个正整数n(1 C语言的一道编程题目题目大概是这个意思吧.就是想知道算法,不用具体写代码出来了.下面是我的思路,不知道去数的时候怎么写输入n表示输入数字的个数2.输入0到6之间 n个数字3.从n个数字钟 c语言,输入两个正整数m和n,求两个数的最大公约数与最小公倍数