`
mmdev
  • 浏览: 13327100 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

【100题】第二十一题(中兴面试题)

 
阅读更多

一,题目:输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来。

二,解释:比如输入m=4 n=4 则输出为:4

1+3 而2+2不正确,因为重复输出数字了

中心思想:1)如果1+2+3+……+n<m 则不存在这个数

2)如果m<n 则应该让n=m //因为m--->n之间的数都已经大于m了 没必要再计算了

3)如果m=n 输出n

4)如果m>n 递归循环

源码采用原型:0-1背包问题

参考博客:http://blog.csdn.net/tianshuai11/article/details/7025464

三,源码:(类似源码五)

#include<list>
#include<iostream>  
using namespace std;  
  
list<int> list1;  
void find_factor(int sum, int n)   
{  
    // 递归出口  
    if(n <= 0 || sum <= 0)  
        return;  
      
    // 输出找到的结果  
    if(sum == n)  
    {  
        // 反转list  
        list1.reverse();  
        for(list<int>::iterator iter = list1.begin(); iter != list1.end(); iter++)  
            cout << *iter << " + ";  
        cout << n << endl;  
        list1.reverse();      
    }  
      
    list1.push_front(n);      //典型的01背包问题  
    find_factor(sum-n, n-1);   //放n,n-1个数填满sum-n  
    list1.pop_front();  
    find_factor(sum, n-1);     //不放n,n-1个数填满sum   
}  
  
int main()  
{  
    int sum, n;  
    cout << "请输入你要等于多少的数值sum:" << endl;  
    cin >> sum;  
    cout << "请输入你要从1.....n数列中取值的n:" << endl;  
    cin >> n;  
    cout << "所有可能的序列,如下:" << endl;  
    find_factor(sum,n);  
    return 0;  
}  



四,源码(java方法)

/**
 * 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,
	使其和等于 m ,要求将其中所有的可能组合列出来.
	
	e.g 
	n=6,m=6   1,2,3    2,4    1,5
	n=
 * @author wangxm
 */
public class Comp {
	static void getAllComp(int n,int m){
		String pre = m+"=";
		int theMax = (1+n)*n/2;
		if(theMax<m){
			System.out.println("不存在该数!");
		}else{
			for(int i=1;i<=m/2;i++){
				//从1开始计数,打印出两个数的组合,并且两数不相等
				if(i != m-i)
					System.out.println(pre+i+"+"+(m-i));
				//调用递归,继续求得大于2个数的组合
				getTheResult(m-i,pre+i,i);
			}
		}
	}
	//调用递归,继续求得大于2个数的组合,j为组合中已用过的数,所以取大于该数的。
	static void getTheResult(int m,String pre,int j){
		for(int i=j+1;i<=m/2;i++){
			if(i != m-i)
				System.out.println(pre+"+"+i+"+"+(m-i));
			getTheResult(m-i,pre+"+"+i,i);
		}
	}
	
	public static void main(String[] args) {
		getAllComp(3,6);
	}
}
五,源码(容易理解)

#include <iostream>   
using namespace std; 
int length;   
void PrintSolution(int *flag)
 {   
   for (int i=0;i<length;i++)   
     {      
	   if (flag[i]==1)    
	        {          
			   cout<<i+1<<"  ";   
                }   
     }   
    cout<<endl;
 }
void BagProblem(int m,int n, int *flag)
 {     
       if (n<1||m<1)    
          return;
       if (m<n)    
	    n=m;    
       if (n==m)    
       {     
           flag[n-1]=1;    
           PrintSolution(flag); 
           flag[n-1]=0;  
       }       
		flag[n-1]=1; //n先放入背包中
		BagProblem(m-n,n-1,flag);   //剩余空间为 m-n  可以取的背包为 1->n-1
		flag[n-1]=0;     //n不放入背包中
		BagProblem(m,n-1,flag); //剩余空间为 m  可以取的背包为 1->n-1
} 
int main() {    
	int m,n;     
	cout<<"please input m and n:"<<endl;   
	cin>>m>>n;     
	cout<<"the solution is :"<<endl; 
	length=n;    
	int *flag=(int *)malloc(sizeof(int)*n);  
	memset(flag,0,sizeof(int)*n);//注意memset用法及区分sizeof(flag)/sizeof(int)*n   
	BagProblem(m,n,flag);  
	free(flag);     
	return 0;   
}

【0-1背包公式】opt[i][v] = max(opt[i-1][v] , opt[i-1][v-c[i]] + w[i])
解释如下:
opt[i-1][v] 表示第i件物品不装入背包中,而opt[i-1][v-c[i]] + w[i] 表示第i件物品装入背包中。

对应之后:n为物品 m为背包容积,这里相当于求“所有可能的装满的装法”。忽略了价值的计算即没有真正计算出那种装法最佳



分享到:
评论

相关推荐

    中兴软创java面试题

    【中兴软创Java面试题】是一份2018年的面试资料,涵盖了针对Java开发者在中兴软创面试过程中可能会遇到的问题。这份资源对于准备Java面试,特别是中兴软创公司的面试者来说,是非常宝贵的参考资料。以下是根据这份...

    中兴Java笔试面试题汇总.zip

    思杰hr面+小米二面面经.pdf 我的中兴面试.pdf 中兴、美的9.10面经.pdf 中兴面试.pdf 中兴南京现场技术面.pdf 中兴软件开发(Java)一面.pdf ...作业帮一面广联达一面中兴软件优招滴滴一二面,秋招记录.pdf

    中兴华为面试试题(经典)

    【中兴华为面试试题(经典)】 在信息技术领域,中兴和华为作为全球知名的通信设备制造商,对于人才的选拔有着严格的标准。这两家公司的面试题目往往涵盖了计算机科学、软件工程、网络技术等多个方面,旨在全面考察...

    中兴软件及硬件面试题.

    中兴软件及硬件面试题.中兴软件及硬件面试题.

    中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题

    中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 v中兴笔试题 中兴笔试题 ...中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题

    华为中兴FPGA面试题

    《华为中兴FPGA面试题解析》 在电子工程领域,FPGA(Field-Programmable Gate Array)因其灵活性和高性能而备受青睐,特别是在通信、数据中心、嵌入式系统等行业中发挥着重要作用。华为和中兴作为全球领先的通信...

    中兴软件笔试题及面试题面经

    中兴软件笔试题及面试题面经是求职者准备的重要参考资料,它涵盖了公司的技术要求、专业知识以及面试技巧。这里,我们将深入探讨中兴软件笔试题集锦中的关键知识点,帮助你更好地理解和准备这个过程。 1. 数据结构...

    华为中兴面试题

    华为中兴面试题+招聘流程 集成多年的考试题目 外加招聘流程

    中兴最新面试含英语面试试题,答案,高级介绍

    含英语面试试题,答案,高级介绍 中兴最新面试

    中兴笔试面试试题

    中兴笔试面试试题 非常全面的中兴笔试和面试试题,祝你早日进入中兴通讯公司

    中兴面试题.pdf

    折半查找(也称二分查找)适用于有序数组,通过不断缩小查找范围,提高查找效率。 ```c int halfsearch(int array[], int n, int k) { int i, j, mid; i = 0; j = n - 1; while (i ) { mid = (i + j) / 2; if ...

    C C++中兴面试题大全

    这篇内容我们将深入探讨C和C++在中兴面试中可能涉及的知识点。 1. **基础语法**:这是任何C或C++面试的基础。面试者需要了解变量、数据类型、运算符、控制结构(如if-else、switch-case、for、while循环)以及函数...

    中兴公司笔试和面试题

    《中兴公司笔试和面试题解析》 在IT行业的求职过程中,中兴公司作为全球知名的通信设备制造商,其笔试和面试环节历来备受关注。本文将深入解析中兴公司的笔试题型、面试常见问题以及相关的产品知识,帮助求职者充分...

    中兴光通信面试题及答案.doc

    中兴光通信面试题及答案 中兴光通信面试题及答案是光通信领域的重要知识点,涵盖了光通信系统的故障判断和定位、OTU 无光告警、弱光告警、信号失锁的处理等方面。下面详细解释每个知识点: 一、光通信系统的故障...

    android华为中兴面试题_绝对经典

    在Android领域,面试题往往涵盖了广泛的议题,包括但不限于基础概念、设计模式、性能优化、内存管理、多线程、网络编程、UI设计以及特定厂商如华为、中兴的定制化需求。以下是一些可能出现在“android华为中兴面试题...

    中兴Java面试题

    中兴java面试题目,公司将出哪方面的题目来测试你,以及不同的公司在程序设计方面的侧重点有何不同。希望对你找工作有帮助

    java典型面试题(面试华为,中兴等大公司备看)

    Java作为一门广泛应用的编程语言,其面试题涵盖了众多知识点,尤其在面试华为、中兴等大型IT公司时,面试官往往更关注候选人的基础理论掌握和实践经验。以下是一些常见的Java面试题及其解析: 1. **面向对象的特征*...

    中兴笔试面试试题总汇

    文件中包含大量中兴笔试面试的题目,适合广大毕业求职者

    中兴面试题、答案及面试经验

    中兴面试题、答案及面试经验 从给定的文件信息中,我们可以提取出以下知识点: 面试题 1. 对象关系表达:在某个市场某个商家买了某台电脑,需要用计算机语言表达出里面的关系,其中有商家类、买家类、商品类,...

Global site tag (gtag.js) - Google Analytics