zoukankan      html  css  js  c++  java
  • Sum It Up(加和)

    zoj1711

    题目大意:给出一个和,求出所给数相加等于这个和的所有不同情况

    解决:The numbers in each list appear in nonincreasing order, and there may be repetitions.

    有序是前提,由于有4 6 4 3 2 2 1 1这样的数据存在,我们必须判断重复的等式

    6=3+2+1(第一个1)

    或者是6=3+2+1(第二个1)

    如何判断呢见代码

    //
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int t,n,num[15],res[15];
    bool flag;
    void dfs(int start,int current_step,int current_sum)
    {
        if(t==current_sum)
        {
            printf("%d",res[0]);
            for(int i=1;i<current_step;i++)printf("+%d",res[i]);
            printf("\n");
            flag=true;
            return;
        }
        for(int i=start;i<n;i++)
        {//判重部分,同一层,除第一个不用判断外,其他的必须和第一个不一样,要不然式子相同了就
           if( i==start || num[i]!=num[i-1])
            {
                res[current_step]=num[i];
                dfs(i+1,current_step+1,current_sum+num[i]);
            }
        }
    }
    int main()
    {
    
        while( scanf("%d%d",&t,&n),t||n )
        {
            flag=false;
            memset(res,0,sizeof(res));
            for(int i=0;i<n;i++)scanf("%d",&num[i]);
            printf("Sums of %d:\n",t);
            dfs(0,0,0);
            if(!flag)puts("NONE");
        }
        system("pause");
        return 0;
    }
    

      

  • 相关阅读:
    python-列表基本方法
    成员/身份运算
    python-字符串常用方法
    python基础知识1
    jmeter_性能测试及报告分析
    Day3_linux_工作目录切换命令
    Day2_linux_查看系统状态
    Day1_liunx_常用系统工作命令
    互联网是有记忆的
    第3章 Python基础
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2133108.html
Copyright © 2011-2022 走看看