`
java-mans
  • 浏览: 11390543 次
文章分类
社区版块
存档分类
最新评论

编程之美--寻找满足条件的两个数 .

 
阅读更多

方法一:直接两层循环(O(N*N))

// Find_Sum.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

void find_sum(int a[],int n ,int sum,int *first,int* second)
{
	int num1,num2;
	for(int i=0;i<n;i++)
	{
		num1=a[i];
		for(int j=i;j<n;j++)
		{
			num2=a[j];
			if (num1+num2==sum)
			{
				*first=num1;
				*second=num2;
			}

		}
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	//1、2、4、7、11、15
	int a[]={1,2,4,7,11,15};
	int first,second;
	find_sum(a,6,15,&first,&second);
	printf("first : %d\n",first);
	printf("secong :%d\n",second);
	system("pause");
	return 0;
}


方法二:先对数组进行快速排序(O(nlogn))

// FindTwoNum2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

int Divion(int a[],int left,int right)
{

	int base =a[left];
	while (left<right)
	{
		while(left<right && a[right]>base)
			--right;
		a[left]=a[right];
		while(left<right && a[left]<base)
			++left;
		a[right]=a[left];
	}
	a[left]=base;
	return left;

}

void QuickSort(int a[],int left,int right)
{
	int i=0;
	if (left<right)
	{
		i=Divion(a,left,right);
		QuickSort(a,left,i-1);
		QuickSort(a,i+1,right);
	}
}
bool FindTwoNum(int a[],int sum,int n,int *first,int *second)
{
	QuickSort(a,0,n-1);
	for (int i=0,j=n-1;i<j;)
	{
		if ((a[i]+a[j])==sum)
		{
			*first=a[i];
			*second=a[j];
			return true;
		}
		else if((a[i]+a[j])>sum)
			--j;
		else
			++i;

	}
	return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
	int a[]={1,2,4,7,11,15};
	int first,second;
	bool result=FindTwoNum(a,15,6,&first,&second);
	printf("排序后");
	for (int i=0;i<6;i++)
	{
		printf("%3d ",a[i]);
		
	}
	printf("\n");
	if (result)
	{
		printf("first : %d\n",first);
		printf("secong :%d\n",second);
		system("pause");
	}
	else
	{
		printf("没找到\n");
		system("pause");
	}
	
	return 0;
}


分享到:
评论

相关推荐

    世界500强面试题.pdf

    1.5.6. 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数 ....... 116 1.5.7. 输入一个表示整数的字符串,把该字符串转换成整数并输出.............. 118 1.5.8. 给出一个数列,找出其中最长的单调...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者: (美)Karen Morton Kerry Osborne Robyn Sands Riyaj Shamsudeen Jared Still 译者: 朱浩波 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115266149 上架时间:2011-11-9 出版日期:2011 年...

    算法导论(part1)

    ·动态规划的两个应用(第15.1节和第15.5节)。 ·利用随机化和线性规划技术的近似算法(第35.4节)。 ·为了使更多的算法可以更早地在书中出现,第1版中有关数学背景知识的三章内容从第一部分移到了附录中,即现在...

    第四届 蓝桥杯 竞赛试题题目 C/C++高职高专组

     我们经常会用到求两个整数的最大公约数和最小公倍数的功能。    下面的程序给出了一种算法。    函数 myfunc 接受两个正整数a,b    经过运算后打印出 它们的最大公约数和最小公倍数。    此时,调用 ...

    数据结构(C++)有关练习题

    2、 针对带附加头结点的单链表,试编写下列函数: A. 定位函数Locate:在单链表中寻找第i个结点。若找到,则函数返回第i个结点的地址;若找不到,则函数返回NULL; B. 球最大值函数max:通过单链表的一...

    c#学习笔记.txt

    如果下面两个条件都为真,则方法和委托类型是兼容的:(兼容的概念就是可以用此声明的委托对方法进行委托). 1它们具有相同的参数数目,并且类型相同,顺序相同,参数修饰符也相同。 2它们的返回类型相同。 C# 中的...

    200个经典C程序源码小游戏

    038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择...

    220个C语言程序源代码集合.zip

    038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 ...

    开题报告-基于Java的坦克大战游戏的设计与实现.doc

    多程序技术允许同一个程序有两个执行线索,即同时做两件事情,满足了一些复杂 软件的需求。Java不但内置多线程功能,而且提供语言级的多线程支持,即定义了一些 用于建立、管理多线程的类和方法,使得开发具有多线程...

    C#微软培训资料

    第四章 数 据 类 型 .28 4.1 值 类 型 .28 4.2 引 用 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 ...

    C语言220例从易到难源代码

    038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序...

    c语言经典案例

    实例117 输出两个数中的最大值 156 实例118 判断素数 157 实例119 递归解决年龄问题 158 实例120 递归解决分鱼问题 159 实例121 小数分离 160 实例122 求任意数的n次幂 161 实例123 固定格式输出当前时间 163 实例...

    C语言程序源代码(大集合).rar

    038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 ...

    求解最小生成树算法实现

    而一棵最小生成树就是,树上各边的权值之和最小,即寻找最小生成树就是构造联通网的最小代价生成树。 普利姆(Prim)算法 指定一个起点,且假定这点是已选顶点,然后反复在满足如下条件的边中选择一条最小边,直到所有...

    软件工程-理论与实践(许家珆)习题答案

    软件危机主要表现在两个方面: (1) 软件产品质量低劣,甚至开发过程就夭折。 (2) 软件生产率低,不能满足需要。 4. 什么是软件生存周期模型?它有哪些主要模型? 答:软件生存周期模型是描述软件开发过程中各种...

    C语言源代码实例.rar

    038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序...

    java常用工具类的使用

    该类目前推荐使用的构造方法有两个: 构造方法 说明 Date() 按照当前系统时间构造一个Date对象。 Date(long date) 按照给定的时间毫秒值构造一个 Date 对象。 表1 java.util.Date类的构造方法 主要的方法有: ...

    JSTL详细标签库介绍

    发生异常时,异常周围信息(抛出对象本身类型)-------------异常处理程序&lt;BR&gt;&lt;BR&gt;12.5一个异常处理的简单实例:除数为0&lt;BR&gt;&lt;BR&gt;需求:使用一个小应用程序,完成两数相除的计算&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;...

    220个C源代码 初学C语言必备

    038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序...

Global site tag (gtag.js) - Google Analytics