【UVA】 - 11827 Maximum GCD (注意读入)

本文深入探讨了求一组整数中任意两数最大公约数(GCD)的算法实现,通过具体示例展示了如何使用C++编程语言,结合输入处理和最大公约数计算函数,有效地找出所有可能对的最大GCD。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given the N integers, you have to find the maximum GCD (greatest common divisor) of every possible pair of these integers.
Input
The first line of input is an integer N (1 < N < 100) that determines the number of test cases. The following N lines are the N test cases. Each test case contains M (1 < M < 100) positive integers that you have to find the maximum of GCD.
Output
For each test case show the maximum GCD of every possible pair.
Sample Input
3 10 20 30 40

7 5 12

125 15 25
Sample Output
20 1 25

题意 :

要求一些数的最大公约数,此题的关键在于读入数据

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
int main()
{
    int t;
    scanf("%d",&t);
    getchar();//避免跳行被读入
    while(t--)
    {
        int a[110],sum=0,len=0,maxn=0;
        char s;
        while(1)
        {
            scanf("%c",&s);
            if(s=='\n')
            break;
            if(s>='0'&&s<='9')
            sum=sum*10+s-'0';
            else
            {
                if(sum==0)//空格连续
                continue;
                if(sum!=0)
                a[len++]=sum;
                sum=0;
            }
        }
        if(sum!=0)
        a[len++]=sum;
        for(int i=0;i<len;i++)
        {
            for(int j=i+1;j<len;j++)
            {
                maxn=max(maxn,gcd(a[i],a[j]));
            }
        }
        printf("%d\n",maxn);
    }
    return 0;
 } 
#include<bits/stdc++.h>
 using namespace std;
 #define fst first
 #define sec second
 typedef long long LL;
 typedef pair<int,int> P;
 const int MAX_N = 510;
 const int MAX_M = 10000;
 int gcd (int a, int b) {
     if (b == 0) return a;
     return gcd(b,a % b);
 }
 int nums[110];
 int main() {
     int T;
     cin>>T;
     getchar();//避免跳行被读入
     while (T--) {
         char ch;
         int num = 0;
         int cnt = 0;
         string str;
         getline(cin, str);
         stringstream stream(str);
         while (stream >> nums[cnt]) cnt++;
         int mg = 1;
         for (int i = 0;i < cnt;i++) {
             for (int j = i + 1;j < cnt;j++) {
                 mg = max(mg,gcd(nums[i],nums[j]));
             }
         }
         printf("%d\n",mg);
     }
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值