码迷,mamicode.com
首页 > 其他好文 > 详细

枚举 天平称重

时间:2018-03-20 00:49:39      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:pos   first   题目   ==   AC   size   print   lag   gpo   

天平称重
【问题描述】
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有5个砝码,重量分别是1,392781
则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。

本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
27-9+1

要求程序输出的组合总是大数在前小数在后。
可以假设用户的输入的数字符合范围1~121

题解:所有的天平,可以分为 减,不加,加,也就是 -1,0,1;所以枚举五个天平 所有这种加或不加,减的可能就可以了。。。然后等于N的,再输出。。可以把把 -1,0,1放在数组中,然后输出时候可以根据数组中数字来进行输出符号。

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

int wei[] = {81, 27, 9, 3, 1};

int ans;

void solve()
{
    int N;
    cin >> N;
    
    int flag[] = {-1, -1, -1, -1, -1};
    for (flag[0] = -1; flag[0] < 2; flag[0]++)
    {
        for (flag[1] = -1; flag[1] < 2; flag[1]++)
        {
            for (flag[2] = -1; flag[2] < 2; flag[2]++)
            {
                for (flag[3] = -1; flag[3] < 2; flag[3]++) 
                {
                    for (flag[4] = -1; flag[4] < 2; flag[4]++)
                    {
                        int tmp = flag[0]*wei[0] + flag[1]*wei[1] + 
                                  flag[2]*wei[2] + flag[3]*wei[3] + flag[4]*wei[4];
                        if (tmp == N)
                        {
                            bool is_first = true;
                            for (int i = 0; i < 5; i++)
                            {
                                if (flag[i] == -1) {
                                    printf("-%d", wei[i]);
                                }
                                else if (flag[i] == 1) {
                                    if (is_first) {
                                        printf("%d", wei[i]);
                                    }
                                    else {
                                        printf("+%d", wei[i]);
                                    }
                                    is_first = false;
                                }
                            }
                            printf("\n");
                        }
                    }
                }
            }
        }
    }

}

int main()
{
    solve();
    
    return 0;
}

 

枚举 天平称重

标签:pos   first   题目   ==   AC   size   print   lag   gpo   

原文地址:https://www.cnblogs.com/douzujun/p/8605915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!