分数问题的各种语言描述

分数问题的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);
		  }
		  
		 }
}

这道题方法很多,大家都可以思考一下更简单的方法去解决!!!

上一篇:Gtaelt运维面试题如何通过shell批量删除用户 ?


下一篇:368. 最大整除子集(动态规划)