CF 342A Xenia and Divisors (数学规律)
转载请注明出处:http://blog.csdn.net/a1dark
分析:这题是一个数学规律的题、由于题目说了给出的数据都不大于7、又要满足a,b,c能够相互整除的情况、所以经推导只有3种情况:
1 2 4
1 2 6
1 3 6
于是规律就出来了、我们只需要判断1的个数、2的个数、3的个数、4的个数、6的个数能不能满足这种规律、就可以了、其中3和4是独立的、所以可以用1的个数减去3和4的个数、剩下第二组1的个数、2和6是同样的道理、最后只剩下1、2、6的个数、看相不相等并且必须要大于等于0才行、
#include<stdio.h>#include<string.h>int dp[10];int map[10];int main(){ int n,x,i; while(scanf("%d",&n)!=EOF){ memset(dp,0,sizeof(dp)); memset(map,0,sizeof(map)); for(int i=0;i<n;i++){ scanf("%d",&x); dp[x]++; } for(int j=1;j<=6;j++) map[j]=dp[j]; dp[1]=dp[1]-dp[3]; dp[1]=dp[1]-dp[4]; dp[2]=dp[2]-dp[4]; dp[6]=dp[6]-dp[3]; if(dp[1]>=0&&dp[2]>=0&&dp[6]>=0&&dp[1]==dp[2]&&dp[1]==dp[6]&&(n==(map[1]+map[2]+map[3]+map[4]+map[6]))){ for(i=1;i<=dp[4];i++){ printf("1 2 4\n"); } for(i=1;i<=dp[6];i++) printf("1 2 6\n"); for(i=1;i<=dp[3];i++) printf("1 3 6\n"); } else { printf("-1\n"); } } return 0;}