Codeforces Round #131 Hometask

來源:互聯網
上載者:User

題意:給定一個集合,求在用集合中的數字中最大的一個能被2,3,5整除的數。

方法:能被2,5整除的末尾一定是0,能被3整除的各位元字之和也一定可以被3整除。重點是後者的判斷。首先,用sum記錄集合中數位和(貪心,數字越多越好)。然後發現,所有的整數都可以z=3*k+b表示,若兩個數x=3*k+b,y=3*k+b (x-y)%3==0,那麼首先找到這樣一個數(要取最小的)。若找不到,那就重小到大找兩個,不放心的的話從0到9判斷幾次都行,最後從小到大輸出剩餘數。原題資料若輸入:1,1;即使返回0,也是會判對。

#include<stdio.h>#include<string.h>int set[10];int main(){    int n,x,sum,i;    while(scanf("%d",&n)!=EOF)    {        memset(set,0,sizeof(set));        sum=0;        while(n--)        {            scanf("%d",&x);            set[x]++;            sum+=x;        }        for(i=0;i<10&&sum%3;i++)        if(i%3==sum%3&&set[i])        {            sum-=i;            set[i]--;            break;        }        n=2;        while(n--)        {            for(i=0;i<10&&sum%3;i++)            if(i%3&&set[i])            {                sum-=i;                set[i]--;            }        }        if(sum%3||set[0]==0)        {            printf("-1\n");            continue;        }        if(sum==0)set[0]=1;        for(i=9;i>=0;i--)        while(set[i]--)        printf("%d",i);        printf("\n");    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.