CDOJ--1804---小帆宝与数字8

来源:互联网 发布:java编写水仙花数 编辑:程序博客网 时间:2024/06/05 19:47

小帆宝与数字8

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

 

小帆宝8岁时换了个可爱的小同桌,小同桌非常喜欢8这个数字。一天上课学习完乘法后,小同桌给了帆宝一堆数,问帆宝能不能把它们排成一排,

让所有相邻两个数的乘积都为8的倍数呢?
帆宝当然拒绝不了可爱小同桌的要求啦,但是又怕答错呢。机智的你能帮帮他吗?

Input

第一行一个数,表示数字个数N(N100)N(N≤100)
第二行有N个数,分别是小同桌给帆宝的第ii个数ai(ai(1,2,4, 8))

Output

如果能找到满足条件的排列方法,输出”YES”并在第二行输出任意一种方案,如果不能,则输出”NO”。(无双引号,注意大小写)

Sample input and output

Sample InputSample Output
48 1 1 8
YES1 8 8 1
31 2 4
NO



AC代码:
#include<stdio.h>int n;int a[110];int t1,t2,t4,t8;int main(){scanf("%d",&n);t1=t2=t4=t8=0;for(int i=0;i<n;i++){int x;scanf("%d",&x);if(x==1) t1++;else if(x==2) t2++;else if(x==4) t4++;else t8++;}int k=0;for(int i=0;i<t1;i++){a[k++]=1;if(t8>0){a[k++]=8;t8--;}}for(int i=0;i<t2;i++){a[k++]=2;if(t4>0){a[k++]=4;t4--;}else if(t4==0 && t8>0){a[k++]=8;t8--;}}for(int i=0;i<t4;i++) a[k++]=4;for(int i=0;i<t8;i++) a[k++]=8;bool flag=true;for(int i=0;i<k-1;i++){if((a[i]*a[i+1])%8!=0){printf("N0\n");flag=false;break;}}if(flag){printf("YES\n");for(int i=0;i<k-1;i++) printf("%d ",a[i]);printf("%d\n",a[k-1]);}return 0;}














原创粉丝点击