首页 > 试题广场 >

最大公约数1

[编程题]最大公约数1
  • 热度指数:9036 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
读入n个正整数,求出这n个数的最小值、最大值以及它们两的最大公约数,并输出。输入中第一行为n,接下来为n个大于零的整数。

输入描述:
第一行为n。第二行是n个大于零的整数,用空格隔开。


输出描述:
分别输出最小值、最大值和它们两的最大公约数,用空格隔开。
示例1

输入

3
4 8 6

输出

4 8 4
#include<stdio.h>
int gcd(int a,int b)
{
    if(b==0)
        return a;
    else
        return gcd(b, a%b);
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int *arr;
        arr=(int *)malloc(sizeof(int)*n);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&arr[i]);
        }
        int max,min;
        max=min=arr[0];
        for(int i=0;i<n;i++)
        {
            if(arr[i]>max)
                max=arr[i];
            if(arr[i]<min)
                min=arr[i];
        }
        printf("%d %d %d\n",min,max,gcd(min, max));
    }
    return 0;
}
发表于 2021-02-18 22:36:54 回复(0)
#include<stdio.h>
int main()
{
    int n,i,a[100000],max,min,gong;//报错数组越界堆栈溢出可能是数组大小不够
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        max=a[0];min=a[0];
        for(i=1;i<n;i++)
        {
            if(a[i]>max) max=a[i];
            if(a[i]<min) min=a[i];
        }
        for(i=min;i>=1;i--)//最大公约数
            if(max%i==0&&min%i==0)
            {
                gong=i;break;
            }
        printf("%d %d %d\n",min,max,gong);    
    }
}

发表于 2020-04-09 12:38:14 回复(0)
//注意最大最小开始都应设为a[0]
#include<iostream>
using namespace std;
int zdgy(int a,int b){
    while(a%b!=0){
        a=a-a/b*b;
        int temp=a;
        a=b;
        b=temp;
    }
    return b;
}
int main(){
    int n;
    while(cin>>n){
        int *a=new int[n],max,min;
        for(int i=0;i<n;i++){
            cin>>a[i];
            if(i==0)
                max=min=a[0];
            if(a[i]>max) max=a[i];
            if(a[i]<min) min=a[i];
        }
        cout<<min<<" "<<max<<" "<<zdgy(max,min)<<endl;
    }
}

发表于 2020-01-16 21:32:35 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int a[] = new int[n];
            for (int i = 0; i < n; i++) {
                a[i] = in.nextInt();
            }
            Arrays.sort(a);
            int min = a[0];
            int max = a[n - 1];
            int maxGYNum = getMaxGYNum(min, max);
            System.out.println(min + " " + max + " " + maxGYNum);
        }
    }
    public static int getMaxGYNum(int a, int b) {
        while (b != 0) {
            int t = a % b;
            a = b;
            b = t;
        }
        return a;
    }
//也可以使用下面的方法来求最大公约数
 public static int getMaxGYNum(int a, int b) {
       while(a!=b){
        if(a>b){
            a = a-b;
        }
        if(b>a){
            b = b-a;
        }
       }
        return a;
    }
}

编辑于 2023-03-13 16:10:58 回复(0)
c++的STL真的很方便,一个sort,一个求公约数函数就完事了
#include<bits/stdc++.h>
using namespace std;
int f(int b,int c)
{
    if(c==0)
        return b;
    else return f(c,b%c);
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int a[n];
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        sort(a,a+n);
        printf("%d %d %d\n",a[0],a[n-1],f(a[0],a[n-1]));
    }
    return 0;
}

发表于 2020-04-10 10:41:51 回复(0)
#include <iostream>
using namespace std;
#include "vector"
#include<algorithm>
int fun(int a,int b){
    while(a % b != 0){
        int temp = a%b;
        a=b;
        b = temp;
    }
    return b;

}
int main() {
    int n;
    while (cin >> n) {
        vector<int>v(n);
        for (int i = 0; i < n; i++) {
            cin >> v[i];
        }
        sort(v.begin(), v.end());
        int max_num = v[n - 1];
        int min_num = v[0];
        cout << min_num << " " << max_num << " " << fun(max_num,min_num);
        cout<<endl;
    }

}

发表于 2025-02-05 17:22:45 回复(0)
#include <algorithm>
#include <climits>
#include <iostream>
#include <numeric>
using namespace std;

int main() {
    int n;
    while (cin >> n) {
        int maximum = 0, minimum = INT_MAX;
        while (n--) {
            int x;
            cin >> x;
            maximum = max(maximum, x);
            minimum = min(minimum, x);
        }
        cout << minimum << " " << maximum << " " << gcd(maximum, minimum) << endl;
    }
    return 0;
}

编辑于 2024-03-12 11:47:08 回复(0)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n;
    while (cin >> n) {
        vector<int> my;int temp;
        for (int i = 0; i < n; ++i) {
            cin >> temp;
            my.push_back(temp);
        }

        sort(my.begin(),my.end());

        int min = my[0],max = my[my.size()-1];
        cout << min << " " << max << " ";
        if(max % min == 0){
            cout << min << endl;
        }else{
            int maxl = 1;
            for(int i = 2;i < min;++i){
                if(min % i == 0 && max % i == 0){
                    maxl = i;
                }
            }
            cout << maxl << endl;
        }
    }
}
// 64 位输出请用 printf("%lld")

发表于 2023-03-28 15:14:36 回复(0)
#include <cstdio>
#include <climits>
using namespace std;

int gcd(int a,int b){
    if(b==0) return a;
    else return gcd(b,a%b);
}

int main(){
    int n;
    while(scanf("%d",&n) != EOF){
        int arr[n];
        int maximum = -INT_MAX, minimum = INT_MAX, mgcd;
        for(int i = 0; i < n; ++i){
            scanf("%d",&arr[i]);
            if(arr[i] > maximum)  maximum = arr[i];
            if(arr[i] < minimum)  minimum = arr[i]; 
        }
        mgcd = gcd(maximum,minimum);
        printf("%d %d %d\n",minimum,maximum,mgcd);
    }
    return 0;
}

发表于 2023-03-23 15:47:30 回复(0)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

long long gcd(long long x, long long y) {
    if (y == 0) return x;
    return gcd(y, x % y);
}

int main() {
    int a;
    
    while (cin >> a) {
        vector<long long> vec;
        for (int i = 0; i < a; ++i) {
            long long temp;
            cin >> temp;
            vec.push_back(temp);
        }

        sort(vec.begin(), vec.end());
        long long x = vec[0];
        long long y = vec[a - 1];
        cout << x << " " << y <<" "<< gcd(x, y) <<endl;
    }
}
// 64 位输出请用 printf("%lld")

发表于 2023-03-05 12:55:21 回复(0)
#include <iostream>
using namespace std;

int gcd(int m, int n) {
    int max = m > n ? m : n ;
    int min = m < n ? m : n ;
    return max % min == 0 ? min : gcd(min, max - min);
}

int main() {

    int n;
    while (cin >> n) {
        int min = 0x7fffffff, max = 0x80000000;
        int *a = new int[n];
        for (int i = 0 ; i < n ; i++) {
            cin >> a[i];
            if (a[i] > max)
                max = a[i];
            if (a[i] < min)
                min = a[i];
        }
        cout << min << " " << max << " " << gcd(max, min) << endl;
    }
    return 0;
}

发表于 2022-09-11 21:33:29 回复(0)
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>myvector;

int zhuanhuan(int a,int b){
    if(b==0){
        return a;
    }else{
        return zhuanhuan(b,a%b);
    }
}
int main(){
    int n,a,max,min;
    while(scanf("%d",&n)!=EOF){
        myvector.clear();
     for(int i=0;i<n;i++){
        scanf("%d",&a);   
         myvector.push_back(a);
     } 
       sort(myvector.begin(),myvector.end());
        min=myvector[0];%若用begin返回的是指针
        max=myvector[n-1];
       printf("%d %d %d\n",min,max,zhuanhuan(min,max)); 
    }
}
发表于 2022-04-20 11:11:27 回复(0)
#include<stdio.h>
int findmax(int a[],int n){
    int i,max;
    max=a[0];
    for(i=1;i<n;i++)
        if(max<a[i])
            max=a[i];
    return max;
}
int findmin(int a[],int n){
    int i,min;
    min=a[0];
    for(i=1;i<n;i++)
        if(min>a[i])
            min=a[i];
    return min;
}
int findmaxnum(int a,int b){
    int c;
    while(a%b!=0){
        c=a;
        a=b;
        b=c%b;
    }
    return b;
}
int main(){
    int n,i,min,max,maxnum;
    int a[100000];
    while(scanf("%d",&n)!=EOF){
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        min=findmin(a,n);
        max=findmax(a,n);
        maxnum=findmaxnum(max,min);
        printf("%d %d %d\n",min,max,maxnum);
    }
}

发表于 2022-02-17 16:19:57 回复(0)
#include<iostream>
using namespace std ;
int GCD(int x , int y) {
    if(y == 0) return x ;
    else return GCD(y , x%y) ;
}
int main() {
    int max,min,n,a ; //a为当前输入
    while(cin >> n) {
        cin >> a ;
        max = a ;
        min = a ;
        for(int i = 1 ; i < n ; i++) {
            cin >> a ;
            if(max < a) max = a ;
            if(min > a) min = a ;
        }
        int res = GCD(max , min) ;
        cout << min << ' ' << max << ' ' << res << endl ;
    }
    return 0 ;
}

发表于 2022-02-08 09:24:26 回复(0)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int c_max(int a,int b)//辗转相除法或欧几里得算法
{
    if(b == 0)
        return a;
    else
        return c_max(b, a % b);
}

int main(void)
{
    int n;
    
    while(cin >> n)
    {
        vector<int> arr;
        int x;
        while(n--)
        {
            cin >> x;
            arr.push_back(x);
        }
        
        sort(arr.begin(), arr.end(),less<int>());
        int len = arr.size();
        cout << arr[0] << ' ' << arr[len - 1] << ' ';
        
        int c_value = c_max(arr[0], arr[len - 1]);
        cout << c_value << endl;
    }
    return 0;
}

发表于 2022-02-02 16:00:58 回复(0)
求公约数的时候,一定要从min开始j--,不能从1开始j++,否则的话会超时。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int n;
    while(cin >> n)
    {
        int a[n];
        for(int i=0;i<n;i++)
        {
            cin >> a[i];
        }
        sort(a,a+n);
        int min=a[0];
        int max=a[n-1];
        int yue;
        for(int j=min;j>=1;j--)
        {
            if(min%j==0&&max%j==0)
            {
                yue=j;
                break;
            }
        }
        cout << min << " " << max << " " << yue << endl;
     }
    return 0;
}


发表于 2021-03-29 16:28:36 回复(0)
#include<iostream>
using namespace std;
int GCD(int a,int b){
    if(b==0) return a;
    else return GCD(b,a%b);
}
int main(){
    int n;    
    while(cin>>n){
        int arr[n];
        for(int i=0;i<n;i++)
            scanf("%d",&arr[i]);
        int min=2147483647,max=0;
        for(int i=0;i<n;i++){
            if(arr[i]<min) min=arr[i];
            if(arr[i]>max) max=arr[i];}        
        int ans=GCD(min,max);
        printf("%d %d %d\n",min,max,ans);
    }
}

发表于 2021-03-21 23:56:42 回复(0)
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
int gongyue(int a,int b){
    if(b==0){
        return a;
    }
    else{
        return gongyue(b,a%b);
    }
}
int main(){
    int n,c;
    int temp=0;
    while(scanf("%d",&n)!=EOF){
        vector<int> ab;
        while(n!=0){
            scanf("%d",&c);
            ab.push_back(c);
            n--;
        }
        int max=ab[0];
        int min=ab[0];
        for(int i=1;i<ab.size();i++){
            if(ab[i]>max){
                max=ab[i];
            }
            else if(ab[i]<min){
                min=ab[i];
            }
        }
        printf("%d %d %d\n",min,max,gongyue(max,min));
    }
    return 0;
}

发表于 2021-03-08 15:51:09 回复(0)
我就想知道什么鬼?无法理解你输入全是7.。。。哪来的1???哪来的4?
发表于 2021-01-18 16:20:42 回复(0)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

int func(int a, int b)
{
    if(a % b == 0){
        return b;
    } else{
        return func(b, a % b);
    }
}

int main()
{
    int n;
    while(cin>>n){
        if(n < 1){
            break;
        }
        int arr[n];
        int minx, maxx;
        for(int i = 0; i < n; i++){
            cin>>arr[i];
            if(i == 0){
                minx = arr[0];
                maxx = arr[0];
            } else{
                minx = minx < arr[i] ? minx : arr[i];
                maxx = maxx > arr[i] ? maxx : arr[i];
            }
        }
        cout<<minx<<" "<<maxx<<" "<<func(maxx, minx)<<endl;
    }
    return 0;
}

发表于 2021-01-14 05:40:48 回复(0)

问题信息

上传者:小小
难度:
35条回答 4259浏览

热门推荐

通过挑战的用户

查看代码
最大公约数1