科技网站设计公司排行榜,wordpress插件采集好不好,wordpress图片不显示,上海网站开发外包公司目录 ⭐题目描述⭐ ⭐分析 ⭐程序代码 运行结果 ⭐文案分享⭐ ⭐题目描述⭐ 本题的要求很简单#xff0c;就是求N个数字的和。麻烦的是#xff0c;这些数字是以有理数分子/分母的形式给出的#xff0c;你输出的和也必须是有理数的形式。 输入格式#xff1a; 输入第一行给出… 目录 ⭐题目描述⭐ ⭐分析 ⭐程序代码 运行结果 ⭐文案分享⭐ ⭐题目描述⭐ 本题的要求很简单就是求N个数字的和。麻烦的是这些数字是以有理数分子/分母的形式给出的你输出的和也必须是有理数的形式。 输入格式 输入第一行给出一个正整数N≤100。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外负数的符号一定出现在分子前面。 输出格式 输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分其中分数部分写成分子/分母要求分子小于分母且它们没有公因子。如果结果的整数部分为0则只输出分数部分。 输入样例1 5
2/5 4/15 1/30 -2/60 8/3输出样例1 3 1/3输入样例2 2
4/3 2/3输出样例2 2输入样例3 3
1/3 -1/6 1/8输出样例3 7/24 ⭐分析 我们可以用两个变量sum和num来计算分子和分母的变化一开始我们将sum的值赋为0num的值赋为1然后字母a为输入分数的分子b为分母以样例测试一为例 5
2/5 4/15 1/30 -2/60 8/3 算法描述为 for(int i0;iN;i){scanf(%d/%d,a,b);sum*b;sumnum*a;num*b;int snum_GY(num,sum);//寻找num和sum的最大公约数sumsum/s;//将分子和分母最简化numnum/s;} sum0anum1b sum0*50 sum01*22 2num1*555sum2/12sum和num的最大公约数为1num5/15sum和num的最大公约数为1 sum2*1530 sum305*450 4num5*157515sum50/252sum和num的最大公约数为25num75/253sum和num的最大公约数为25 sum2*3060 sum603*163 1num3*309030sum63/97sum和num的最大公约数为9num90/910sum和num的最大公约数为9 sum7*60420 sum42010*(-2)400 -2num10*6060060sum400/2002sum和num的最大公约数为200num600/2003sum和num的最大公约数为200 sum2*36 sum63*830 8num3*393sum30/310sum和num的最大公约数为3num9/33 sum和num的最大公约数为3 求两个数的最大公约数我们可以用辗转相除法这样我们的程序的时间复杂度是O(n)如果我们在写算法题的过程中遇到超时问题请先检查我们的算法是否有循环套循环的过程如果有请想办法去掉一层循环来降低我们的算法时间复杂度。 辗转相除法的算法描述 int num_GY(int num,int sum){//寻找分子分母的最大公约数int minnumsum?num:sum;//找出两个数的最小值int maxnumsum?num:sum;//找出两个数的最大值int t;while(min!0){//利用辗转相除法计算最大公约数tmax%min;maxmin;mint;}return max;
} 举例 我们可以任意找两个数比如63和90我们来用辗转相除法求最大公约数。 首先我们先判断出这两个数的最大值和最小值。 int minnumsum?num:sum;//找出两个数的最小值
int maxnumsum?num:sum;//找出两个数的最大值 循环tmax90min63第一次循环min!0)t90%6327max63min27第二次循环min!0)t63%279max27min9第三次循环min!0)t27%90max9min0第四次循环min0)退出循环返回max9结束 ⭐程序代码
#includestdio.h
int num_GY(int num,int sum){//寻找分子分母的最大公约数int minnumsum?num:sum;//找出两个数的最小值int maxnumsum?num:sum;int t;while(min!0){//利用辗转相除法计算最大公约数tmax%min;maxmin;mint;}return max;
}
int main(){int N;scanf(%d,N);int a,b;int sum0,num1;//sum为分子和num为分母和for(int i0;iN;i){scanf(%d/%d,a,b);sum*b;sumnum*a;num*b;int snum_GY(num,sum);sumsum/s;//将分子和分母最简化numnum/s;}if(sum%num0)//当分子是分母的倍数时printf(%d,sum/num);else if(sumnum)//当分子小于分母时printf(%d/%d,sum,num);else//当分子大于分母时printf(%d %d/%d,sum/num,sum%num,num);return 0;
} 运行结果 ⭐文案分享⭐
永远相信美好的事情即将发生。--------2023.12.2