关于由单位电阻串并联组成特定阻值电阻,单位电阻使用数量最小解,Matlab,C语言

问题遇到的现象和发生背景

img

问题相关代码,请勿粘贴截图

这是代码一,Matlab,出现的问题有:当a>b时,无法计出结果;结果形式为x+结果,如何把x去掉呀


clear;clc;

a=input('请输入电阻值的分子:');
b=input('请输入电阻值的分母:');
syms x c
%syms a b x c
%[a,b]=numden(input('请输入电阻值'))

while a<b
    a = a+b;b = a-b;a = a-b;%交换两个数,使其变为假分数
    %x+=fix(a./b);
    x=x+fix(a./b);
    a=rem(a,b);
    if a==0
        break
    end
end
    
disp(x)

这是代码二,Matlab,问题在它不出结果


clear;clc;

a=input('请输入电阻值的分子:');
b=input('请输入电阻值的分母:');
syms x c
%syms a b x c
%[a,b]=numden(input('请输入电阻值'))

if a<b
    a = a+b;b = a-b;a = a-b;
else
    a=a;b=b;
end

while  a>0
    
    % a<b
    %a = a+b;b = a-b;a = a-b;%交换两个数,使其变为假分数
    x=x+fix(a./b);
    a=rem(a,b);
     
end



disp(x)
    

这是代码三,c语言,可行,但看不懂循环体


#include<stdio.h>

 #include<string.h>

  #include<algorithm>

 using namespace std;//  namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

  int main()//整数数据类型 

 {

    long long a,b,x,tmp;//定义长整型变量 

    scanf("%I64d%I64d",&a,&b);//输入 

   tmp=0;//赋初值0 

   if (a<b) swap(a,b);//转换为假分数形式,即分子大于分母 ;两个互为倒数的阻值 在单位电阻的构成上仅最后一步的串并联不同,故其个数相同 
 
   while (b!=0) //b不等于0时
  
   {   

     tmp+=a/b;//对tmp累加每次循环后的a/b值 ,复合赋值运算符 

     x=a%b; a=b; b=x;//x为a/b的余数 ,此时分数形式用上一次循环的a,b表示即为(b/(a除以b后的余数)),当a/b为整数即无余数时终止循环 

  }  
  
   printf("%I64d\n",tmp);//64位的长整型整数输出,并换行 

   return 0;//表示该程序运行结束后,正常退出

}

代码四,不知道怎么写了


#include <stdio.h>
int main()
{
    float a,b,m,n,mins;
    printf("please input a b\n");    
    scanf("%f,%f",&a,&b);
    
    m=floor(a/b);
    x=(a-b*floor(a/b))/b;
    y=b;
    
 if x=1
    n=m+y;
    else
           
int min(int x,int y);//判断分子与分母之间的大小;
int main()
{   
      int fz,fm,i=1;  //  i为分子分母公因数,从1开始;
      scanf("%d/%d",&fz,&fm);   
       do      
            {   i++;    
                if(fz%i==0&&fm%i==0)   //判断条件是i此时为分子与分母的公因数;
                   {        
                       fz=fz/i;      
                       fm=fm/i;     
                        i=1;  //循环判断时让i恢复初始值重复循环;
                       }      
                }while(i<min(fz,fm)); // 截至条件是公因数不能大于其本身;
      printf("%d/%d",fz,fm);   
      return 0;
 }
      int min(int x,int y)
      {    if(x>=y)   
                 return y;  
           else   
                  return x;
           }

    if x=1
    n=m+y;
    else
    x=y
    y=x;
    
    
    
   m=m;
   n=n;
   mins=m+n;
    
    printf("串联电阻有m=%0.2f\n并联电阻有n=%0.2f\n",m,n);
    printf("最少需要mins=%0.2f\n个1欧姆的电阻可以组合出阻值为a/b的欧姆电阻",mins)
    return 0;
}
运行结果及报错内容

代码一的存在bug的结果如下


请输入电阻值的分子:5
请输入电阻值的分母:3
x
 

请输入电阻值的分子:3
请输入电阻值的分母:5
x + 4
我的解答思路和尝试过的方法
我想要达到的结果