(1) 任何大于6的偶数都能表示为两个素数之和,如“40=3+37”.设计一个算法,求任意一个大于6的偶数n的这两个素数 。
#include <iostream>
#include <math.h>
using namespace std;
int sushu(int a)
{
for (int i=2; i<sqrt(a); i++)
{
if (a%i == 0)
{
return 0;
}
}
return 1;
}
void main()
{
int a;
cout << "请输入一个大于6的偶数:";
cin >> a;
for (int i=0; i<a/2; i++)
{
if (sushu(i) && sushu(a-i))
{
cout<<a<<"="<<i<<"+"<<a-i<<endl;
break;
}
}
}
(2)设计一个递归算法,求二叉树BT,度为2的结点数,度为1的结点数和叶结点数 。二叉树结点的结构为:
left | data | right |
typedef struct Tree{
Tree *left;
Tree *right;
int data;节点数据存储点,类型任意
} Tree ;
int treeNodeCount(Tree *t)
{
if(t==NULL)
return 0;
else {
if ((t->left!=NULL)&&(t->right!=NULL))
return treeNodeCount(t->left)+1+treeNodeCount(t->right);
else return 0;
}
}
(3)数组A有n个正整数,设计一个算法,判定A是否存在子序列,其和为给定的整数K。若有,输出的子序列的起始位置和终止位置
#include<stdio.h>
#define N 8
void dy_and(int a[],int s[][N])
{
int i,j;
for(i=0;i<N;i++)
s[i][i]=a[i];
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
s[i][j]=s[i][j-1]+a[j];
}
void main()
{
int a[N];
int s[N][N]={0};
int i,j,b,c,k=0;
printf("请输入数组:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("请输入K值=\n");
scanf("%d",&k);
dy_and(a,s);
for(i=0;i<N;i++)
for(j=i;j<N;j++)
if(s[i][j]==k)
{
b=i+1;
c=j+1;
}
if(k<0)
k=0;
printf("存在子序列和为:%d,从数组的第%d个数开始,到第%d个数结束\n",k,b,c);
}