首页 > 试题广场 >

编一个程序,输入一个正整数,输出上述序列。

[问答题]

给定一个正整数N,由所有分母小于或等于N的最简真分数按从小到大组成一个序列,例如,N=5,

1/5  1/4  1/3  2/5  1/2  3/5  2/3  3/4  4/5

编一个程序,输入一个正整数,输出上述序列。

#include<stdio.h>
int jc(int x){	//阶乘 
	int i,n=1;
	for(i=1;i<=x;i++)
		n*=i;
	return n;
}
void maxY(int x,int y){  //找最大公约数
	int i,max,min;
	max=x>y?x:y;
	min=x>y?y:x;
	for(i=min;i>0;i--)
		if(max%i==0&&min%i==0){		// i是最大公约数 
			printf("%d/%d  ",min/i,max/i);	//以真分数形式输出 
			break;
		}
}
void sort(int x){		//由小到大排序 
	int n=jc(x),num[n]={0};	//n是x的阶乘,在下面充当分母;num[]里存放通分之后的分子 
	int i,j,len=0;
	int k,temp;
	for(i=1;i<x;i++)		
		for(j=x;j>i;j--){
			if(i==1)		//如果不加这一句,分子为1的真分数就取不到了 
				num[len++]=n/j*i; 
			else if(j%i!=0)
				num[len++]=n/j*i;//把能取到的真分数全部通分,分子存在num[]里
		}
	for(i=0;i<len-1;i++){	//冒泡排序(由小到大) 
		k=i;
		for(j=i;j<len;j++)
			if(num[j]<num[k])
				k=j;
		if(k!=i){
			temp=num[k];
			num[k]=num[i];
			num[i]=temp;
		}
	}
	for(i=0;i<len;i++)	
		maxY(num[i],n);//输出真分数形式 
}
int main(){
	int n;
	scanf("%d",&n);
	sort(n);
	return 0;
}

发表于 2020-04-06 18:23:08 回复(0)
    public static List<String> solution(int n) {
        Set<Data> set = new HashSet<>();
        for (float i = 2; i <= n; i++) {
            for (float j = 1; j <= i - 1; j++) {
                StringBuilder builder = new StringBuilder();
                String name = builder.append(j).append("/").append(i).toString().replace(".0", "");
                set.add(new Data(name, j / i));
            }
        }
        List<Data> list = new ArrayList<>(set);
        list.sort(new Comparator<Data>() {
            @Override
            public int compare(Data o1, Data o2) {
                return o1.getValue() > o2.getValue() ? 1 : -1;
            }
        });
        List<String> result = list.stream().map(o -> {
            return o.getName();
        }).collect(Collectors.toList());
        return result;
    }

    static class Data {
        private String name;
        private float value;

        public Data(String name, float value) {
            this.name = name;
            this.value = value;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public float getValue() {
            return value;
        }

        public void setValue(float value) {
            this.value = value;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }
            Data data = (Data) o;
            return Float.compare(data.value, value) == 0;
        }

        @Override
        public int hashCode() {
            return Objects.hash(value);
        }

        @Override
        public String toString() {
            return "Data{" +
                    "name='" + name + '\'' +
                    ", value=" + value +
                    '}';

编辑于 2019-12-06 16:55:54 回复(0)
@Test
    public void aaaaaaa() {
        
        List<Data> list = new ArrayList<Data>();
        float number = 5;
        for (float i = 5; i > 0; i--) {
            for (float j = 1; j < number && j < i; j++) {
                list.add(new Data(j + "/" + i, j / i));
            }
        }
        
        Collections.sort(list); 
        System.out.println(list.toString());
        
    }
    
    class Data implements Comparable<Data>{
        private String name; 
        private float age; 
        
        public Data(String string, float i) {
            this.name = string;
            this.age = i;
        }

        @Override
        public int compareTo(Data data) {
            return this.age > data.getAge() ? 1 : -1;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public float getAge() {
            return age;
        }

        public void setAge(float age) {
            this.age = age;
        }

        @Override
        public String toString() {
            return name.replaceAll(".0", "");
        }
        
    }

[1/5, 1/4, 1/3, 2/5, 1/2, 2/4, 3/5, 2/3, 3/4, 4/5]


编辑于 2019-10-23 10:41:02 回复(0)
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		int number = sc.nextInt();
		for (int i = 1; i < number; i++) {
			System.out.println(i +"/"+ number);
		}
	}

发表于 2019-10-22 17:21:59 回复(0)
package cn.gof;

import java.util.ArrayList;
import java.util.List;


public class Test3 {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		method(5, list);
		sort(list);
	}

	public static void method(int n, List<String> list) {
		for (int i = 1; i < n; i++) {
			if (i == 1 || n % i != 0) {
				list.add(i + "/" + n);
			}
			method2(i, list);
		}
	}

	public static void method2(int n, List<String> list) {
		for (int i = 1; i < n; i++) {
			if (i == 1 || n % i != 0) {
				list.add(i + "/" + n);
			}
		}
	}

	public static boolean compare(String a, String b) {
		String[] arr = a.split("/");
		int a1 = Integer.valueOf(arr[0]);
		int a2 = Integer.valueOf(arr[1]);

		String[] arrb = b.split("/");
		int b1 = Integer.valueOf(arrb[0]);
		int b2 = Integer.valueOf(arrb[1]);

		if (a1 * b2 > b1 * a2) {
			return true;
		} else {
			return false;
		}
	}

	public static void sort(List<String> list) {

		for (int i = 0; i < list.size() - 1; i++) {
			for (int j = 0; j < list.size() - i - 1; j++) {
				if (compare(list.get(j), list.get(j + 1))) {
					list.add(j + 1, list.get(j));
					list.add(j, list.get(j + 2));
					list.remove(j + 1);
					list.remove(j + 2);
				}
			}
		}
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
	}

}

写的很麻烦有没有简单的方法
编辑于 2019-10-21 20:42:07 回复(0)
#include<stdio.h>
int main(){
    int max_CommonDivisor(int x,int y);
    int n,i,j;
    printf("Please input N:");
    scanf("%d",&n);
    for(i=n;i>=2;i--)
        for(j=1;j<i;j++)
            if(max_CommonDivisor(i,j)==1)
                printf("%d/%d\t",j,i);
    printf("\n");
    return 0;
}/*求x,y的最大公约数*/
int max_CommonDivisor(int x,int y){
    int max,min,t;
    if(x>y){
        max = x;
        min = y;
    }else{
        max = y;
        min = x;
    }
    while(max % min != 0){
        t = min;
        min = max % min;
        max = t;
    }
    return min;
}
发表于 2019-10-21 19:32:03 回复(0)