算法设计
i++; j--;
}
return true;
}
void main()
{
}
上述程序的执行结果如图 1.2 所示。
cout << "求解结果" << endl;
string str="abcd";
cout << " " << str << (solve(str)?"是回文":"不是回文") << endl;
string str1="abba";
cout << " " << str1 << (solve(str1)?"是回文":"不是回文") << endl;
图 1.2 程序执行结果
//递增排序
i++;
j--;
//区间中存在两个或者以上元素
if (a[i]+a[j]==k)
return true;
else if (a[i]+a[j]
#include
using namespace std;
bool solve(int a[],int n,int k)
{
}
void main()
{
int a[]={1,2,4,5,3};
int n=sizeof(a)/sizeof(a[0]);
printf("求解结果\n");
int k=9,i,j;
if (solve(a,n,k,i,j))
else
int k1=10;
if (solve(a,n,k1,i,j))
printf(" 存在: %d+%d=%d\n",a[i],a[j],k1);
printf(" 存在: %d+%d=%d\n",a[i],a[j],k);
printf(" 不存在两个元素和为%d\n",k);
4
第 1 章 概论
printf(" 不存在两个元素和为%d\n",k1);
else
}
上述程序的执行结果如图 1.3 所示。
图 1.3 程序执行结果
10. 解:采用集合 set存储整数序列,集合中元素默认是递增排序的,再采用二
路归并算法求它们的交集。对应的程序如下:
++it2;
//输出集合的元素
++it1;
s3.insert(*it1);
++it1; ++it2;
if (*it1==*it2)
{
}
else if (*it1<*it2)
else
set::iterator it1,it2;
it1=s1.begin(); it2=s2.begin();
while (it1!=s1.end() && it2!=s2.end())
{
}
#include
#include
using namespace std;
void solve(set s1,set s2,set &s3) //求交集 s3
{
}
void dispset(set s)
{
}
void main()
{
int a[]={3,2,4,8};
int n=sizeof(a)/sizeof(a[0]);
set s1(a,a+n);
int b[]={1,2,4,5,3};
int m=sizeof(b)/sizeof(b[0]);
set s2(b,b+m);
set s3;
solve(s1,s2,s3);
printf("求解结果\n");
printf(" s1: "); dispset(s1);
set::iterator it;
for (it=s.begin();it!=s.end();++it)
printf("\n");
printf("%d ",*it);
5
算法设计
printf(" s2: "); dispset(s2);
printf(" s3: "); dispset(s3);
}
上述程序的执行结果如图 1.4 所示。
图 1.4 程序执行结果
11. 解:对于正整数 n,从 i=2 开始查找其质因数,ic 记录质因数 i 出现的次数,当找
到这样质因数后,将(i,ic)作为一个元素插入到 vector 容器 v 中。最后输出 v。对应的
算法如下:
int p;
int pc;
//vector 向量元素类型
//质因数
//质因数出现次数
#include
#include
using namespace std;
struct NodeType
{
};
void solve(int n,vector &v) //求 n 的质因数分解
{
}
void disp(vector &v)
{
}
int i=2;
int ic=0;
NodeType e;
do
{
} while (n>1 || ic!=0);
vector::iterator it;
for (it=v.begin();it!=v.end();++it)
ic++;
n=n/i;
if (n%i==0)
{
}
else
{
}
if (ic>0)
{
}
ic=0;
i++;
e.p=i;
e.pc=ic;
v.push_back(e);
printf(" 质因数%d 出现%d 次\n",it->p,it->pc);
//输出 v
6
算法设计
图 1.6 程序执行结果
13. 解:对于 map容器 mymap,设计另外一个 map容器 tmap,
将前者的 value 作为后者的关键字。遍历 mymap,累计 tmap 中相同关键字的次数。一个
参考程序及其输出结果如下:
#include
#include