高级光能
#include<iostream>
using namespace std;
int main(){
int m,n,r;
cin>>m>>n;
while(m%n!=0){
r=m%n;
m=n;
n=r;
}
cout<<n/r<<" "<<m/r;
}
Wrong Answer:10分
李致远的测评结果:
测试点#1测评结果 : Wrong Answer时间 : 0ms偷看一下数据测试点#2测评结果 : Wrong Answer时间 : 0ms偷看一下数据测试点#3测评结果 : Wrong Answer时间 : 0ms偷看一下数据测试点#4测评结果 : Wrong Answer时间 : 0ms偷看一下数据测试点#5测评结果 : Wrong Answer时间 : 0ms偷看一下数据测试点#6测评结果 : Wrong Answer时间 : 0ms偷看一下数据测试点#7测评结果 : Accepted时间 : 0ms
测试点#8测评结果 : Wrong Answer时间 : 0ms偷看一下数据测试点#9测评结果 : Wrong Answer时间 : 0ms偷看一下数据测试点#10测评结果 : Wrong Answer时间 : 0ms偷看一下数据
???为什么10分?
李致远在2020-02-28 18:49:55追加了内容
我现在差不多知道原因了:比如输入为2 5,输出却为1 2
就是因为整形会自动把小数部分舍去!
求解决方法
PS:不要想把m,n改成double
李致远在2020-02-28 19:13:35追加了内容
额 我会了我是AC传送门(看不见代码!)
新手光能
你的m,n要存一下,否则就会0;
我是你同班同学,卢老师班的,改错如下:
祝你AC,我不会告诉卢老师的,别担心;
吴君昊在2020-02-29 16:23:44追加了内容
老师把同样答案的题发到了QQ群里,你去看看
中级天翼
因为你输出的时候m,n的值已经因为while循环变了
开始要在定义两个变量复制m和n的值
用复制变量进行操作就行了
张帆在2020-02-29 13:44:53追加了内容
我的意思是说再定义两个变量a,b
执行
a=m;
b=n;
最后用a/r和b/r
新手光能
我举一个比较简单的例子:2 4
根据你的程序,r会赋值为2%4=0
那么n也会变成0,分母为0了,肯定会错
我的思路:
1.先用辗转相除法找出他们的最大公因数
2.分子分母分别除以这个最大公因数,就是化简之后的结果
辗转相除法:
int f(int a, int b)
{
if(b == 0) return a;
return f(b, a%b);
}
缪鲲鹏在2020-02-28 19:24:44追加了内容
刚刚我仔细想了一下,你的思路好像也辗转相除法,那么我就修改你的代码吧!
辗转相除法:
第一步: 现用两个变量存储分子,分母
第二步: 用一个变量存储分母的值
第三步: 将分子的值赋值给分母
第四步: 将分子的值赋值成分母(用储存分母值的变量)除以分子的值
也就是:
//n为分母,m为分子
int temp = n ;
n = m;
m = temp%m;
最后的m也就是最大公因数
最后分别用开始被赋值的两个变量分别除以m即可