算法(求对输入的N个数进行加法或减法运算,得到最小的正整数的组合.)
2005-12-11 13:01
417 查看
/**
*
* 对输入的N个数进行加法或减法运算,得到最小的正整数的组合,并将运算
* 序列打印出来。
*
* 算法思想:二叉树搜索比较
*
*
*@Author:ChengZengcun
*@Date :2005/12/10
*
**/
#include <iostream>
using namespace std;
#define N 5
int data
={0};
int status
={1}; //存储最终数据的正负
int old_s
={1};
int sum=0;
void getMin(int index,bool isPositive)
{
if(index==N){
int t=0;
for(int i=0; i<N; i++){
t+=(int)old_s[i]*data[i]; //operate the current value
}
if(t<sum && t>=0 ){
//Find the less num
for(int i=0; i<N; i++){
status[i]=old_s[i];//Store the newest status
///for test
cout<<"****"<<status[i];
}
cout<<"*****"<<endl;
sum = t;
}
return; //递归的出口
}
if(isPositive){
old_s[index]=1;
}else{
old_s[index]=-1;
}
getMin(index+1,true);
getMin(index+1,false); //二叉树搜索
}
int main()
{
cout<<"Please input "<<N<<" numbers"<<endl;
int i=0;
int a=0;
while(i<N){
cin>>a;
data[i]=a;
sum+=a;
i++;
}
cout<<"Start to manage the operation"<<endl;
getMin(0,true);
getMin(0,false);
i=0;
cout<<"the result getted:"<<endl;
while(i<N){
if(status[i]>0){
cout<<"+";
}else{
cout<<"-";
}
cout<<data[i];
i++;
}
cout<<" = "<<sum<<endl;
system("PAUSE");
return 0;
}
以上是我自己写的程序,没有仔细考虑程序分配以及时间复杂度等因素.只是简单的实现,希望可以交流.
*
* 对输入的N个数进行加法或减法运算,得到最小的正整数的组合,并将运算
* 序列打印出来。
*
* 算法思想:二叉树搜索比较
*
*
*@Author:ChengZengcun
*@Date :2005/12/10
*
**/
#include <iostream>
using namespace std;
#define N 5
int data
={0};
int status
={1}; //存储最终数据的正负
int old_s
={1};
int sum=0;
void getMin(int index,bool isPositive)
{
if(index==N){
int t=0;
for(int i=0; i<N; i++){
t+=(int)old_s[i]*data[i]; //operate the current value
}
if(t<sum && t>=0 ){
//Find the less num
for(int i=0; i<N; i++){
status[i]=old_s[i];//Store the newest status
///for test
cout<<"****"<<status[i];
}
cout<<"*****"<<endl;
sum = t;
}
return; //递归的出口
}
if(isPositive){
old_s[index]=1;
}else{
old_s[index]=-1;
}
getMin(index+1,true);
getMin(index+1,false); //二叉树搜索
}
int main()
{
cout<<"Please input "<<N<<" numbers"<<endl;
int i=0;
int a=0;
while(i<N){
cin>>a;
data[i]=a;
sum+=a;
i++;
}
cout<<"Start to manage the operation"<<endl;
getMin(0,true);
getMin(0,false);
i=0;
cout<<"the result getted:"<<endl;
while(i<N){
if(status[i]>0){
cout<<"+";
}else{
cout<<"-";
}
cout<<data[i];
i++;
}
cout<<" = "<<sum<<endl;
system("PAUSE");
return 0;
}
以上是我自己写的程序,没有仔细考虑程序分配以及时间复杂度等因素.只是简单的实现,希望可以交流.
相关文章推荐
- 算法题: 求一个整数数组中,通过元素加减运算得到指定结果的所有运算过程. 例如【5,4,6,7,1】= 9 ?
- 实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:输入t
- 题目:输入N个整数,找出其中最小的k个整数。例如输入 4,5,1,6,2,7,3,8,输入k=4,则输出最小的四个数是1,2,3,4 算法分析: 算法1.O(n)的算法,修改输入的数组 可以基于get
- 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数
- //1、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,写三个函数:1.输入10个数,2.进行处理.3输出10个数
- 习题 8.3 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:1.输入10个整数;2.进行处理;3.输出10个数。
- 贪心算法——n个数连接得到最小或最大的多位整数
- 程序员面试100题(算法)之输入n个整数,输出其中最小的k个
- 大整数算法[08] 有符号加法和减法
- 大型整数运算:加法, 减法, 乘法
- 输入一个整数数组,返回所有元素两两之差绝对值最小的值,O(n)算法
- 实现任意长的整数进行加法运算的演示程序
- 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。
- (c++)输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。 注意:不是排序!不是排序!
- 请输入相应数字选择需要执行的运算: 1 加法 2 减法
- 一个朋友面试时遇到的算法题(怎么组合后得到最大整数)
- 【程序15】TestCompare.java 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 1.程序分析:我们想办法把最小的数放到x上, //先将x与y进行比较,如果x>y则将x与y的值
- 大整数运算之 大整数加法、减法、乘法
- acm题目--正整数n的加法组合的最大乘积的超快算法
- * 问题描述:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。