CF 342A Xenia and Divisors (数学规律)

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

[cpp]
  1. #include<stdio.h>   
  2. #include<string.h>   
  3. int dp[10];  
  4. int map[10];  
  5. int main(){  
  6.     int n,x,i;  
  7.     while(scanf("%d",&n)!=EOF){  
  8.         memset(dp,0,sizeof(dp));  
  9.         memset(map,0,sizeof(map));  
  10.         for(int i=0;i<n;i++){  
  11.             scanf("%d",&x);  
  12.             dp[x]++;  
  13.         }  
  14.         for(int j=1;j<=6;j++)  
  15.             map[j]=dp[j];  
  16.         dp[1]=dp[1]-dp[3];  
  17.         dp[1]=dp[1]-dp[4];  
  18.         dp[2]=dp[2]-dp[4];  
  19.         dp[6]=dp[6]-dp[3];  
  20.         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]))){  
  21.             for(i=1;i<=dp[4];i++){  
  22.                 printf("1 2 4\n");  
  23.             }  
  24.             for(i=1;i<=dp[6];i++)  
  25.                 printf("1 2 6\n");  
  26.             for(i=1;i<=dp[3];i++)  
  27.                 printf("1 3 6\n");  
  28.         }  
  29.         else {  
  30.             printf("-1\n");  
  31.         }  
  32.     }  
  33.     return 0;  
  34. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值