分析:这题是一个数学规律的题、由于题目说了给出的数据都不大于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;
- }