分数问题的Python语言描述
尘心走进图书馆,发现图书馆正在举行数学竞赛活动。擅长解数学题的尘心便上前凑个热闹。他发现一道有趣的题目:设a和b分别为一个分数的分子和分母,其中a <b,给定一个整数n,求一个最大的不可约分的,且 a+b=n的分数a/b
尘心有扎实的编程基础,他经常用o语言解决这类问题。但面对这道题,他却毫无思路。你能帮他解决这道数学题吗?
输入
一个整数n(3 ≤ n≤1000)
输出
用空格分开的a和b
样例
输入
3
输出
1 2
上代码
Python代码1
import fractions
#导入fractions库
def li(a,b): #定义函数来确定是否为不可约
t=1
for i in range(2,min(a,b)):
while(a%i==0 and b%i==0):
t=t*i
a=a/i
b=b/i
return t
n=eval(input())
c=[]
for i in range(1,n):
for j in range(1,n):
if i+j==n:
if i<j and li(i,j)==1:
a=fractions.Fraction(i,j)
c.append(a)
d=max(c)
print(d.numerator,d.denominator)
Python代码2
import math
n=int(input())
for a in range(1,n+1):
b=n-a
if a<b:
ans1=a
ans2=b
if math.gcd(ans1,ans2)==1:
print(ans1,ans2)
elif math.gcd(ans1-1,ans2+1)==1:
print(ans1-1,ans2+1)
Python代码3
import math
n=int(input())
if True:
answer=0
for i in range(n//2+1):
if math.gcd(i,n-i)==1:
answer=i
print(answer,n-answer)
C++语言代码实现
#include<bits/stdc++.h>
using namespace std;
int n, m;
int main()
{
cin >> n;
if(n & 1)
cout << n/2 << " " << n/2+1 << endl;
else
{
if((n/2) & 1)
cout << n/2-2 << " " << n/2+2 << endl;
else
cout << n/2-1 << " " << n/2+1 << endl;
}
return 0;
}
C语言代码实现
#include <stdio.h>
int main()
{
int n,a,b;
scanf("%d",&n);
if(n>=3&&n<=1000)
{
b=n/2+1;
a=n-b;
}
if(b%2==0&&a%2==0)
{
b=b+1;
a=a-1;
}
printf("%d %d",a,b);;
return 0;
}
Java代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] arg) {
// TODO 自动生成的方法存根
//创建对象
Scanner sc= new Scanner(System.in);
//接收数据
int n = sc.nextInt();
int a=0,b=0;
if(n>=3&&n<=1000) {
a = n/2;
b=a+1;
if(n==2*a) {
if(a%2==0) {
b=a+1;
a=a-1;
}
else {
b=a+2;
a=a-2;
}
}
System.out.println(a+" "+b);
}
}
}
这道题方法很多,大家都可以思考一下更简单的方法去解决!!!