zoukankan      html  css  js  c++  java
  • 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
    ",ans*n);
    31     return 0;
    32 }
  • 相关阅读:
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    449. Serialize and Deserialize BST
    114. Flatten Binary Tree to Linked List
    199. Binary Tree Right Side View
    173. Binary Search Tree Iterator
    98. Validate Binary Search Tree
    965. Univalued Binary Tree
    589. N-ary Tree Preorder Traversal
    eclipse设置总结
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/8931509.html
Copyright © 2011-2022 走看看