问题标题: 酷町堂:3721

1
1
已解决
李致远
李致远
高级光能
高级光能
#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;
}

3721   分数化简

 

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传送门(看不见代码!)


0
已采纳
吴君昊
吴君昊
新手光能
新手光能

你的m,n要存一下,否则就会0;

我是你同班同学,卢老师班的,改错如下:

祝你AC,我不会告诉卢老师的,别担心;

吴君昊在2020-02-29 16:23:44追加了内容

老师把同样答案的题发到了QQ群里,你去看看

0
张帆
张帆
中级天翼
中级天翼

因为你输出的时候m,n的值已经因为while循环变了

开始要在定义两个变量复制m和n的值

用复制变量进行操作就行了

张帆在2020-02-29 13:44:53追加了内容

我的意思是说再定义两个变量a,b

执行

a=m;
b=n;

最后用a/r和b/r

0
缪鲲鹏
缪鲲鹏
新手光能
新手光能

我举一个比较简单的例子: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即可

0
我要回答