zoukankan      html  css  js  c++  java
  • 【ZOJ 3844】Easy Task

    每次把序列中最大的数a的一个和最小的数b的一个变成a-b。求最后是否能使序列里的数全部相同,能则输出这个相同的数。

    分析

    一定是有解的,不断减少最大数的个数,最大数减少为0个时,就是减少了不同数字的个数,最后就只剩一种数字了。

    可以直接暴力模拟。

    代码

    #include<cstdio>
    int ok(int a[],int n)
    {
        int i;
        for(i=1; i<n; i++)
            if(a[i]!=a[i+1])break;
        return i==n;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            int a[12];
            int maxi,mini;
            scanf("%d",&n);
            for(int i=1; i<=n; i++)
            {
                scanf("%d",&a[i]);
            }
            while(!ok(a,n))
            {
    
                maxi=mini=1;
                for(int i=1; i<=n; i++)
                {
                    if(a[i]>a[maxi])
                    {
                        maxi=i;
                    }
                    if(a[i]<a[mini])
                    {
                        mini=i;
                    }
                }
                a[maxi]=a[mini]=a[maxi]-a[mini];
            }
            printf("%d
    ",a[1]);
        }
        return 0;
    }
  • 相关阅读:
    linux 常用命令
    git 常见命令
    合并两个有序链表---python
    Code Contract for .NET
    Kruskal最小生成树算法
    逻辑-哲学
    停机问题
    逆向工程
    .net framework
    python 类库
  • 原文地址:https://www.cnblogs.com/flipped/p/5215664.html
Copyright © 2011-2022 走看看