※北京大学 最简真分数(java)(主要看优化)

题目描述
给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。
输入描述:
每组包含n(n<=600)和n个不同的整数,整数大于1且小于等于1000。
输出描述:
每行输出最简真分数组合的个数。
示例1
输入
复制
7
3 5 7 9 11 13 15
3 
2 4 5
0
输出
复制
17 
2
import java.util.*;
import java.io.*;
import java.math.*;
import java.text.* ;
public class Main
{
	public static void main(String[] args) {
		try 
		{
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String str;
			while((str = br.readLine()) != null) {
				int n = Integer.parseInt(str);
				String[] parts = br.readLine().split(" ");
				int[] num = new int[n];
				for(int i = 0; i < n; i++) {
					num[i] = Integer.parseInt(parts[i]);
				}
				int count = 0;
				for(int i = 1; i < n; i++) {
					count += i;
				}
				for(int i = 0; i < n; i++) {
					for(int j = i+1; j < n; j++) {
						for(int k = 2; k <= num[i] && k <= num[j]; k++) {
							if(num[i] % k == 0 && num[j] % k == 0) {
								count--;
								break;
							}
						}
					}
				}
				System.out.println(count);
			}
		} catch(IOException e) {
			e.printStackTrace();	
		}
	}
}

优化之后

import java.util.*;
import java.io.*;
import java.math.*;
import java.text.* ;
public class Main
{
	public static void main(String[] args) {
		try 
		{
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String str;
			while((str = br.readLine()) != null) {
				int n = Integer.parseInt(str);
				String[] parts = br.readLine().split(" ");
				int[] num = new int[n];
				for(int i = 0; i < n; i++) {
					num[i] = Integer.parseInt(parts[i]);
				}
				int count = 0;
				for(int i = 0; i < n; i++) {
					for(int j = i+1; j < n; j++) {
						if(check(num[i], num[j]) == 1) {
							count++;
						}
					}
				}
				System.out.println(count);
			}
		} catch(IOException e) {
			e.printStackTrace();	
		}
	}
    public static int check(int a,int b){
        if(b==0) return a;
        return check(b,a%b);
    }
}

发布了252 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43306331/article/details/104281829
今日推荐