Fox and Number Game

Fox Ciel is playing a game with numbers now.

Ciel has n positive integers: x1x2, ..., xn. She can do the following operation as many times as needed: select two different indexes i and j such that xi > xj hold, and then apply assignment xi = xi - xj. The goal is to make the sum of all numbers as small as possible.

Please help Ciel to find this minimal sum.

Input

The first line contains an integer n (2 ≤ n ≤ 100). Then the second line contains nintegers: x1x2, ..., xn (1 ≤ xi ≤ 100).

Output

Output a single integer — the required minimal sum.

Examples

Input
2
1 2
Output
2
Input
3
2 4 6
Output
6
Input
2
12 18
Output
12
Input
5
45 12 27 30 18
Output
15

Note

In the first example the optimal way is to do the assignment: x2 = x2 - x1.

In the second example the optimal sequence of operations is: x3 = x3 - x2x2 = x2 -x1.

 

 

目意思:给你n个数,任意两个数直接,大数可以减去小数得到新的值再赋值给大数,如此反复,直到不出现大数和小数,即所有的数都相等。

解题思路:我看了看数据量很小,于是可以选择使用模拟的方法,将过程模拟了一下,其实能够发现这道题存在着规律,最后所有的数都会变成所有数的最大公约数。

 

上代码:

模拟法:

 1 #include<stdio.h>
 2 #include<algorithm>
 3 using namespace std;
 4 int main()
 5 {
 6     int n,i,j,ans;
 7     int a[1010];
 8     scanf("%d",&n);
 9     for(i=0; i<n; i++)
10     {
11         scanf("%d",&a[i]);
12     }
13     while(1)
14     {
15         sort(a,a+n);
16         if(a[n-1]==a[0])///互相减,直到都相等
17         {
18             break;
19         }
20         for(j=n-1; j>0; j--)
21         {
22             if(a[j]!=a[j-1])
23             {
24                 a[j]=a[j]-a[j-1];
25             }
26             else
27             {
28                 continue;
29             }
30         }
31     }
32     ans=a[0]*n;
33     printf("%d",ans);
34     return 0;
35 }

 

 

找到规律,使用GCD:

 

 1 #include<stdio.h>
 2 #include<algorithm>
 3 using namespace std;
 4 int gcd(int a,int b)
 5 {
 6     int r;
 7     while(b>0)
 8     {
 9          r=a%b;
10          a=b;
11          b=r;
12     }
13     return a;
14 }
15 int main()
16 {
17     int i,k,n,ans;
18     int a[1010];
19     scanf("%d",&n);
20     for(i=0;i<n;i++)
21     {
22         scanf("%d",&a[i]);
23     }
24     k=a[0];
25     for(i=1;i<n;i++)
26     {
27         ans=gcd(k,a[i]);
28         k=ans;
29     }
30     printf("%d\n",ans*n);
31     return 0;
32 }

 

转载于:https://www.cnblogs.com/wkfvawl/p/8931509.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值