Xenia and Divisors CF342A(数学规律)


点击打开链接

题意分析:给定n个数(n为3的倍数)均在1~6之间,是否能将其三个一组分成n/3组,且满足a < b < c;  a dividesb, b dividesc.

                    若能将其输出,不能则输出-1。1~6之间能满足连续整除关系的只有1 2 4;1 2  6; 1 3 6;只需要统计各个数字出现的数

                    量然后判断其数量关系即可,其中5 7必定不能出现,1出现的次数最多。自己当时错在判断条件错了,当时想得太简单,

                    只写了一个判断条件if(ans[1]  == ans[2] + ans[3] && ans[1] == ans[4] + ans[6])这种情况对于1 2 3 4 6均出现的条件是满足

                    的,但是其他条件却不一定成立。

#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int n,m;
    int ans[15];
    int num = 0,flag = 1;
    scanf("%d",&n);
    memset(ans, 0, sizeof(ans));
    for(int i = 0; i < n; i++)
    {
        scanf("%d",&m);
        ans[m] += 1;
        if(ans[m] == 1)
            num++;
        if(m == 5 || m == 7)
            flag = 0;
    }
    bool ok = true;
    if(num < 3 || !flag) //出现的数字少于三个或者出现5或7则必定不能成功分组                          
        ok = false;                                // 1 2 4 
    int a3 = ans[3], a4 = ans[4];                  // 1 2 6 
    if(ans[1] < ans[3] || ans[6] < ans[3])         // 1 3 6
        ok = false;
    ans[1] -= ans[3]; ans[6] -= ans[3];
    if(ans[1] != ans[2] || ans[6] + ans[4] != ans[2]) ok = false;
    int a6 = ans[6];
    if(ok)
    {
        while(a3--) printf("1 3 6\n");
        while(a4--) printf("1 2 4\n");
        while(a6--) printf("1 2 6\n");
    }
    else
        printf("-1\n");
    return 0;
}


                  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值